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; }