顺序表
顺序表
线性表的顺序存储又称顺序表。表中元素的逻辑顺序与其物理顺序相同。
定义
静态定义:
|
静态分配时,数据量小的话,会造成数组空间的浪费;而如果是数据量大的话,就会造成溢出,进而导致程序崩溃。所以我们采用下面更灵活的方式来
动态分配
|
C的初始化分配语句为:
L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize); |
这句话的意思是malloc向系统申请分配 ( sizeof(ElemType)*InitSize )的内存空间,ElemType类型的指针指向这块内存的首地址。
C++的初始化分配语句为:
L.data = new ElemType[InitSize]; |
顺序表上的基本操作:
初始化
//初始化顺序表(静态分配) |
求表长
int Length(Sqlist L) { |
按值查找
int LocateElem(Sqlist L,ElemType e) { |
最好情况:查找的元素就在表头,时间复杂度为O(1)
最坏情况:查找的元素在表尾,时间复杂度为O(n)
平均情况:比较的平均次数为 (n+1) / 2
因此,线性表的按值查找操作算法时间复杂度为O(n)。
按位查找
ElemType GetElem(Sqlist L,int i) { |
插入操作
bool ListInsert(Sqlist& L,int i,ElemType e) { |
最好情况:在表尾插入,时间复杂度为O(1)
最坏情况:在表头插入,时间复杂度为O(n)
平均情况:所需移动结点的平均次数为 n/2
因此,线性表的插入操作算法时间复杂度为O(n)。
删除操作
bool ListDelete(Sqlist& L,int i,ElemTyep &e) { //删除第i位上的数,并通过e返回其值 |
最好情况:在表尾删除,时间复杂度为O(1)
最坏情况:在表头删除,时间复杂度为O(n)
平均情况:所需移动结点的平均次数为 (n-1) / 2
因此,线性表的删除操作算法时间复杂度为O(n)。
动态分配的那点事
初始化顺序表
//初始化顺序表 |
增加动态数组的长度
//增加动态数组的长度 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 修心的小屋!
评论