c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
2017-08-21 16:47
1661 查看
c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
顺序表的特点是元素的逻辑顺序与物理顺序相同
顺序表结构:
顺序表初始化
顺序表插入
算法就是先后移,然后进行插入
插入的时间复杂度的分析:
最好情况下不进行移动O(1)
最坏的情况下移动n次,O(n)
平均情况下,插入第i个位置要移动n+1-i次,根据全概率公式求和有平均时间复杂度O(n)
顺序表删除
先保存元素的值,然后再进行向前移动
删除的时间复杂度的分析:
最好情况下不进行移动O(1)
最坏的情况下移动n-1次,除了第一个,其余的都要移动,O(n)
平均情况下,删除第i个位置要移动n-i次,根据全概率公式求和有平均时间复杂度O(n)
注意保存e的值:*e = data[i-1];
e是int*类型的,也就是指针类型
如果是e=data[i-1]则,e指向这个地址,而不是值
*e表示指针指向的内存地址中存放的内容
&e表示取指针e的地址,&在c语言里面是取地址的符号,在c++里面才是引用。
查找顺序表中第一个等于e的元素的位置
顺序表的特点是元素的逻辑顺序与物理顺序相同
顺序表结构:
#include <stdio.h> #define InitSize 100 typedef int ElemType; typedef struct{ ElemType * data; int MaxSize , length; }SeqList; int InitList(SeqList *L); //顺序表初始化 int ListInsert(SeqList *L, int i, ElemType e); int ListDelete(SeqList *L, int i, ElemType *e); int LocateElem(SeqList L, ElemType e);//查找顺序表中第一个等于e的元素的位置
顺序表初始化
int InitList(SeqList *L){ L->data = (ElemType*)malloc(sizeof(ElemType)*InitSize); if(!L->data) return -1; L->length = 0; L->MaxSize = 50; return 1; }
顺序表插入
算法就是先后移,然后进行插入
int ListInsert(SeqList *L, int i, ElemType e){ if(i < 1 || i > L->length+1) return -1; if(L->length > L->MaxSize) return -1; for(int j = L->length ; j >= i ; j--) L->data[j] = L->data[j-1]; L->data[i-1] = e; L->length++; return 1; }
插入的时间复杂度的分析:
最好情况下不进行移动O(1)
最坏的情况下移动n次,O(n)
平均情况下,插入第i个位置要移动n+1-i次,根据全概率公式求和有平均时间复杂度O(n)
顺序表删除
先保存元素的值,然后再进行向前移动
int ListDelete(SeqList *L, int i, ElemType *e){ if(i < 1 || i > L->length+1) return -1; *e = L->data[i-1]; for(int j = i; j < L->length; j++) L->data[j-1] = L->data[j]; L->length--; return 1; }
删除的时间复杂度的分析:
最好情况下不进行移动O(1)
最坏的情况下移动n-1次,除了第一个,其余的都要移动,O(n)
平均情况下,删除第i个位置要移动n-i次,根据全概率公式求和有平均时间复杂度O(n)
注意保存e的值:*e = data[i-1];
e是int*类型的,也就是指针类型
如果是e=data[i-1]则,e指向这个地址,而不是值
*e表示指针指向的内存地址中存放的内容
&e表示取指针e的地址,&在c语言里面是取地址的符号,在c++里面才是引用。
查找顺序表中第一个等于e的元素的位置
int LocateElem(SeqList L, ElemType e){ int i; for(i = 0; i < L.length; i++){ if(L.data[i] == e) return i+1; } return -1; }
相关文章推荐
- (1)顺序表的操作 ① 输入一组整型元素序列,建立线性表的顺序存储结构。 ② 实现该线性表的遍历。 ③ 在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。 ④ 在该顺序表中删除或插入指
- 利用C语言实现二叉搜索树的遍历、查找、插入、删除
- 用Lua实现插入、删除和查找时间复杂度为O(1)的集合
- C语言实现链表的创建,初始化,插入,删除,查找
- 用Lua实现插入、删除和查找时间复杂度为O(1)的集合
- 二叉查找树原理分析及查找、插入、删除、遍历实现
- C语言实现顺序表的插入、删除、查找、遍历等基本操作
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- C语言实现顺序表的初始化,插入,删除,查找
- 链表的初始化、遍历、删除、插入、判断是否为空、求长度 C语言实现
- C语言:动态链表的建立,查找,删除,插入功能的实现
- 二叉排序树的建立、插入、删除、查找、4种遍历 C++完整实现
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- 转载:二叉查找树原理分析及查找、插入、删除、遍历实现
- c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
- 平衡二叉树的建立,查找,插入,调整,遍历的C语言实现
- 二叉排序树的建立、插入、删除、查找、比较、4种遍历方式的C++完整实现版
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 对线性表理解以及C语言实现链表的插入删除等操作。