C语言数据结构(3)--顺序存储线性表

简介: 本文目录0. 系列文章索引1. 顺序存储线性表的概念2. 有哪些操作3. 代码实现

0. 系列文章索引

点此查看系列文章


1. 顺序存储线性表的概念

线性表简单的说就是有序的元素集合,像Java里面的List。


数组其实就是一个简单的线性表,但是更多的只能代表线性表的一种存储结构,如果是一个完善的线性表的话,还应该包括删除元素、查询元素、修改元素等操作。


线性表的存储结构最常见的有两大类,一个是用一维数组,一个使用链表,本篇演示一维数组实现的线性,即顺序存储线性表;链表实现的线性表可以称之链式存储线性表。


2. 有哪些操作

显示线性表元素个数

展示线性表的所有元素

获取指定位置元素

在指定位置插入元素

删除指定位置元素

清空线性表

大体上常用的也就这些操作了,下面我们来具体实现下。


3. 代码实现

/*
* 顺序存储线性表
* 作者:熊猫大大
* 时间:2019-09-22
*/
#include<stdio.h>
#define MAXSIZE 100 //最大元素个数
// 线性表的结构体
typedef struct {
  int data[MAXSIZE];
  int count;//当前元素个数
}SequenceList;
// 获取元素个数
int getCount(SequenceList *list)
{
  return list->count;
}
// 显示所有元素
void printList(SequenceList *list)
{
  int i;
  printf("\n所有元素:");
  for (i = 0; i < list->count; i++)
  {
    printf("%d", list->data[i]);
  }
}
// 获取指定位置元素,返回值放入result指向元素
int getData(SequenceList *list, int index, int *result)
{
  if (index<0 || index>list->count - 1)
  {
    return 0;//0表示失败
  }
  *result = list->data[index];
  return 1;//1表示成功
}
// 插入元素
int insertData(SequenceList *list, int index, int input)
{
  int i;
  if (list->count >= MAXSIZE) //满了
  {
    return 0;
  }
  if (index<0 || index>list->count) //不在合理范围
  {
    return 0;
  }
  if (index != list->count) //插入数据不在表尾
  {
    for (i = list->count; i >= index; i--)
    {
      list->data[i] = list->data[i - 1];
    }
  }
  list->data[index] = input;
  list->count++;
  return 1;
}
// 删除指定位置元素
int deleteData(SequenceList *list, int index)
{
  int i;
  if (index<0 || index>list->count - 1) //不在合理范围
  {
    return 0;
  }
  for (i = index; i < list->count - 1; i++)
  {
    list->data[i] = list->data[i + 1];
  }
  list->count--;
  return 1;
}
// 清空所有元素
int clearData(SequenceList *list)
{
  list->count = 0;
}
// 程序入口
int main()
{
  //初始化
  SequenceList sequenceList;
  SequenceList *list = &sequenceList;
  list->count = 0;
  //插入元素
  insertData(list, 0, 1);
  insertData(list, 1, 2);
  insertData(list, 2, 3);
  printList(list);
  //获取元素
  int result = -1;
  getData(list, 1, &result);
  printf("\ngetData:%d", result);
  //删除指定位置元素
  deleteData(list, 1);
  printList(list);
  //清空元素
  clearData(list);
  printList(list);
  printf("\n");
  return 1;
}
相关文章
|
12月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
504 1
|
12月前
|
存储 算法 搜索推荐
【趣学C语言和数据结构100例】91-95
本文涵盖多个经典算法问题的C语言实现,包括堆排序、归并排序、从长整型变量中提取偶数位数、工人信息排序及无向图是否为树的判断。通过这些问题,读者可以深入了解排序算法、数据处理方法和图论基础知识,提升编程能力和算法理解。
170 4
|
12月前
|
存储 机器学习/深度学习 搜索推荐
【趣学C语言和数据结构100例】86-90
本文介绍并用C语言实现了五种经典排序算法:直接插入排序、折半插入排序、冒泡排序、快速排序和简单选择排序。每种算法都有其特点和适用场景,如直接插入排序适合小规模或基本有序的数据,快速排序则适用于大规模数据集,具有较高的效率。通过学习这些算法,读者可以加深对数据结构和算法设计的理解,提升解决实际问题的能力。
150 4
|
12月前
|
存储 算法 数据处理
【趣学C语言和数据结构100例】81-85
本文介绍了五个经典算法问题及其C语言实现,涵盖图论与树结构的基础知识。包括使用BFS求解单源最短路径、统计有向图中入度或出度为0的点数、统计无向无权图各顶点的度、折半查找及二叉排序树的查找。这些算法不仅理论意义重大,且在实际应用中极为广泛,有助于提升编程能力和数据结构理解。
132 4
|
9月前
|
定位技术 C语言
c语言及数据结构实现简单贪吃蛇小游戏
c语言及数据结构实现简单贪吃蛇小游戏
|
10月前
|
搜索推荐 C语言
数据结构(C语言)之对归并排序的介绍与理解
归并排序是一种基于分治策略的排序算法,通过递归将数组不断分割为子数组,直到每个子数组仅剩一个元素,再逐步合并这些有序的子数组以得到最终的有序数组。递归版本中,每次分割区间为[left, mid]和[mid+1, right],确保每两个区间内数据有序后进行合并。非递归版本则通过逐步增加gap值(初始为1),先对单个元素排序,再逐步扩大到更大的区间进行合并,直至整个数组有序。归并排序的时间复杂度为O(n*logn),空间复杂度为O(n),且具有稳定性,适用于普通排序及大文件排序场景。
|
10月前
|
存储 算法 C++
【C++数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
本任务要求编写程序实现图的邻接矩阵和邻接表的存储。需掌握带权有向图、图的邻接矩阵及邻接表的概念。邻接矩阵用于表示顶点间的连接关系,邻接表则通过链表结构存储图信息。测试输入为图的顶点数、边数及邻接矩阵,预期输出为Prim算法求解结果。通关代码提供了完整的C++实现,包括输入、构建和打印邻接矩阵与邻接表的功能。
377 10
|
10月前
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
282 7
|
10月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
472 5
|
10月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
305 5

热门文章

最新文章