数据结构之顺序表的插入删除操作(静态分配实现)及其时间复杂度分析
Posted _大木_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之顺序表的插入删除操作(静态分配实现)及其时间复杂度分析相关的知识,希望对你有一定的参考价值。
文章目录
1.顺序表的插入操作
插入元素的位置是i表示插入后,这个插入的元素是在 i 的位置, 即要先找到原先顺序表中i的位置所属元素, 插在此元素的前面即可
#include<stdio.h>
#define MaxSize 5
typedef struct
int data[MaxSize]; //用静态数组存储当前数据
int length; //当前顺序表的长度
SqList;
void InitList(SqList &L)
for(int i = 0; i<MaxSize; i++)
L.data[i] = 0;
L.length = 0;
bool ListInsert(SqList &L,int i,int e)
if(i<1 || i>L.length+1) //判断 i的位置是否合法
printf("插入的位置不合法,请重新定义i的值\\n");
return false;
if(L.length >= MaxSize)
printf("存储已满,不能插入\\n");
return false;
for(int j=L.length; j>=i; j--) //(j 和 i 都是位序)
L.data[j] = L.data[j-1];
L.data[i-1] =e; //在位置 i 处放入e (i是位序)
L.length++; //长度+1
return true;
int main()
SqList L;
InitList(L);
ListInsert(L,1,1);
ListInsert(L,2,3);
ListInsert(L,3,4);
ListInsert(L,4,5);
ListInsert(L,5,6);
bool a= ListInsert(L,2,2);
printf("%d\\n",a); //c语言中 bool类型就是 0 和 1, 因此可以用 %d 来输出
printf("%d,%d",L.data[1],L.length); //打印位序为2的元素和当前的顺序表表长
return 0;
2.顺序表的删除操作
#include<stdio.h>
#define MaxSize 5
typedef struct
int data[MaxSize];
int length;
SqList;
void InitList(SqList &L)
L.length = 5;
for(int i=1; i<=L.length; i++)
L.data[i-1] = i;
// printf("%d",L.data[i-1]);
bool ListDelete(SqList &L,int i,int &e)
if(i<1 || i > L.length)
printf("删除的位置不合法\\n");
return false;
if(L.length == 0)
printf("当前表为空表,删除失败");
return false;
e = L.data[i-1];
for(int m=i; m<L.length; m++)
L.data[m-1] =L.data[m];
L.length --;
return true;
int main()
SqList L;
InitList(L);
int e = -1;
ListDelete(L,3,e);
printf("%d",e);
3.顺序表插入操作的时间复杂度分析
最好情况:
新元素插入到表尾, 则不需要移动元素
i = n+1, 循环0次; 即最好时间复杂度 = O(1)
最坏情况
新元素插入到表头, 则表中的 n 个元素需要全部移动
i =1; 循环n次, 最坏时间复杂度 = O(n)
平均情况
新元素插入有(n+1)种选择,即插入每个位置的概率都是 p= 1/(n+1)
i =1 ,循环n次
i =2 ,循环n-1次
…
i =n+1, 循环 0次
平均循环次数: = np+(n-1)p+…+1*p = n/2
即 平均时间复杂度 = O(n)
4.顺序表删除操作的时间复杂度分析
最好情况:
删除表尾元素, 则不需要移动元素
i = n, 循环0次; 即最好时间复杂度 = O(1)
最坏情况
删除表头元素, 则表中的 n-1 个元素需要移动
i =1; 循环n-1次, 最坏时间复杂度 = O(n)
平均情况
删除操作有n种选择,即删除每个位置的概率都是 p= 1/n
i =1 ,循环n-1次
i =2 ,循环n-2次
…
i =n, 循环 0次
平均循环次数: = (n-1)p+…+1*p = (n-1)/2
即 平均时间复杂度 = O(n)
以上是关于数据结构之顺序表的插入删除操作(静态分配实现)及其时间复杂度分析的主要内容,如果未能解决你的问题,请参考以下文章
(王道408考研数据结构)第二章线性表-第三节1:单链表的定义及其操作(插入和删除,建立之尾插和头插)