线性表的顺序储存结构(静态)实现
来源:互联网 发布:vb.net 选择文件夹 编辑:程序博客网 时间:2024/05/21 15:49
线性表的顺序储存结构(静态)实现线性表的初始化、插入、查找、删除和显示等功能(C++实现)
代码实例:
/* function:线性表的顺序储存结构定义(静态)实现线性表的初始化、插入、查找、删除和显示等功能 created by : xilong date: 2017.1.31*/#include "iostream" // 包含c++的头文件using namespace std; // 使用命名空间 std#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 #define LIST_INIT_SIZE 100 //初始分配量typedef int ElemType;typedef int Status; // Status是函数的类型,typedef struct { ElemType data[MAXSIZE]; //数组元素 int length; // 数组的长度} SqList;/* 功能:查找第i个元素 Status:是函数的类型, 条件:顺序线性表已存在,1 <= i <= Length 操作结果:将查找到第 i 个元素的结果放到指针 e 所指的变量中*/Status GetElem(SqList L, int i, ElemType *e){ if (L.length == 0 || i <1 || i > L.length) { return ERROR; } *e = L.data[i-1]; // 将找到的值放入指针e所指的变量中 return OK;}// 在线性表中第i个元素位置上,插入一个元素e// 数组下标是从0开始的,而我们实际是从1开始的,所以下面是i-1.// 功能:在线性表 L 的第 i 个位置插入元素e。Status ListInsert(SqList *L, int i, ElemType e){ int k; if (L->length == MAXSIZE) { return ERROR; // 顺序线性表已经满了 } if (i < 1 || i > L->length) { return ERROR; // i输入不规范 } if (i <= L->length) // 如果待插入的值不在表尾 { for (k = L->length; k >= i - 1; k--) // 从最后一个元素往前遍历,直到i-1(待插入的位置) { L->data[k + 1] = L->data[k]; // 从最后一个元素到第i-1个元素,将这些元素的下标统一向后移一位 } } L->data[i - 1] = e; // 在线性表 L 的第 i 个位置插入元素e L->length++; // 线性表的长度加一 return OK;}// 删除元素// 在线性表 L 的第 i 个位置删除元素eStatus ListDelete(SqList *L, int i, ElemType *e){ int k; if (L->length == 0) return ERROR; // 线性顺序表为空。 if (i < 1 || i > L->length) return ERROR; // i输入不规范 *e = L->data[i - 1]; if (i < L->length) // 如果待删除的的值不在表尾 { for (k = i; k <= L->length; k++) // 从删除位置的元素往后遍历,直到最后一个元素 { L->data[k - 1] = L->data[k]; // 从删除位置的元素往后遍历,将这些元素的下标统一向前移一位 } } L->length--; return OK;}/* 功能:初始化一个空的线性表L 因为内存是静态分配,所以不用malloc函数,直接设置线性表的长度为0就ok*/Status InitList(SqList *L){ //int i; //L->length = (int)malloc(LIST_INIT_SIZE * sizeof(int)); //L->data[MAXSIZE] = {9}; /*if (!L->data) { printf("初始化失败!"); exit(0); }*/ L->length = 0; return OK;}// 遍历线性表Status listTraverse(SqList *L){ int i; for (i = 0; i < L->length; i++){ printf("%d ", L->data[i]); } printf("\n"); return OK;}//自动创建 5 个元素,并赋值为0,为插入操作提供准备Status createList(SqList *L){ int i; for (i = 0; i < 5; i++){ L->data[i] = 0; } L->length = 5; return OK;}// 给定e,查找线性表 L 中有没有元素 e。Status locateData(SqList *L, ElemType e){ int i; for (i = 0; i < L->length; i++) { if (e == L->data[i]) { return i; } } return ERROR;}void main(){ SqList L; ElemType e; InitList(&L);// 初始化。 createList(&L); // 创建了5个元素,为接下来的插入操作提供准备 ListInsert(&L, 1, 4); // 在第一个位置插入4(不是下标) ListInsert(&L, 4, 8); // 在第4个位置插入8(不是下标) cout << "----ListInsert start-------------" << endl; if (ListInsert(&L, 3, 21)){ cout << "插入成功!" << endl; } else{ cout << "插入失败!" << endl; } cout << "----ListInserts start-------------" << endl; listTraverse(&L); cout << "----GetElem start-------------" << endl; if (GetElem(L, 3, &e)){ // 找到第3个元素,并将第三个元素放到变量e中。 cout << "第三个元素的值为:" << e << endl; // 打印变量e的值。 } else cout << "没有找到." << endl; cout << "----GetElem end-------------" << endl; int index = locateData(&L, 4); // 将返回的下标放入变量index中 cout << index+1 << endl; // 打印元素在第几个位置 cout << "------ListDelete start-----------" << endl; if (ListDelete(&L, 1, &e)){ // 找到第3个元素,并将第三个元素放到变量e中。 cout << e << "已经删除" << endl; // 打印变量e的值。 listTraverse(&L); } else cout << "没有找到." << endl; cout << "------ListDelete end---------" << endl; cout << L.data[2] << endl; cout << L.length << endl; system("pause");}
运行截图
总结
线性表顺序存储结构,在执行插入或者删除时,时间复杂度都是O(n),这就说明,此算法比较适合元素个数比较稳定,不经常插入和删除元素,插入和删除操作需要移动大量元素,容易造成存储空间的“碎片”。
0 0
- 线性表的顺序储存结构(静态)实现
- 线性表--顺序储存结构 java实现
- 线性表的顺序储存结构定义(动态)实现
- 数据结构 线性表的顺序储存结构
- 线性表--顺序储存结构
- 线性结构--->循环队列的顺序储存实现
- 线性表的顺序储存及运算实现-------------顺序表
- 线性表的顺序储存结构 初始化、查找、删除、插入
- 数据结构中线性表的顺序储存结构
- 线性表的顺序储存结构(向量 )(一)
- 线性表的顺序储存
- 线性表的顺序储存
- 线性表的顺序储存及运算实现
- 线性表的顺式储存结构与实现
- 数据结构---线性表的顺序储存
- 顺序结构线性表的实现
- c++实现线性表的顺序结构
- 数据结构线性表顺序结构的实现
- 富爸爸--财务自由之路2
- 算是总结2016,想想2017
- 面向对象
- suricata for Hanic Improved documentation
- 通过字符流来对文件进行内容的读取和写入操作
- 线性表的顺序储存结构(静态)实现
- 富爸爸--财务自由之路3
- 进入java 行业的开山之作
- (转)FPS科普
- 1055. The World's Richest (25)-排序(易)
- 纯css3实现美化复选框和手风琴效果(详细)
- 0x3f3f3f3f 编程中无穷大常量的设置技巧
- Java正则-String.matches的坑
- 富爸爸--财务自由之路4