宿迁网站优化排名,wordpress全站背景音乐,手机主题制作软件app,国外网站建设素材线性表的定义
线性表是具有相同数据类型的n个数据元素的有限序列#xff0c;
逻辑特性
除第一个元素外#xff0c;每个元素只有一个前驱#xff0c;除最后一个元素外#xff0c;每个元素都有一个后继
物理结构
线性表的存储结构有顺序存储结构和链式存储结构#xff…线性表的定义
线性表是具有相同数据类型的n个数据元素的有限序列
逻辑特性
除第一个元素外每个元素只有一个前驱除最后一个元素外每个元素都有一个后继
物理结构
线性表的存储结构有顺序存储结构和链式存储结构前者称为顺序表后者称为链表。
顺序表
线性表的顺序存储又称顺序表。特点是用一组地址连续的存储单元依次存储数据从而使逻辑相邻的两个元素在物理地址上也相连。
#define MaxSize 50 //定义线性表最大长度
typedef int ElemType; //定义数据类型typedef struct{ElemType data[MaxSize]; //用一维数组来存储数据int length; //定义线性表的当前长度
}SqList;上面是用一位数组是静态分配也可以用动态分配
#define InitSize 100
typedef struct{
ElemType *data;
int MaxSize,length;
}SqList;顺序表特点
随机访问存储密度高因为物理地址连续
基本操作
1、插入
在顺序表L的第i个位置插入新元素e如果插入位置i不合法则返回false如果顺序表满了返回false否则将顺序表的第i个元素及其后所有的元素右移一位
bool ListInsert(SqList L, int i, ElemType e)
{if (i1 || iL.length 1) //此处注意是length1不能是MaxSizereturn false;if (L.length MaxSize)return false;for (int jL.length;ji;j--){L.data[j] L.data[j-1];}L.length;return true;
}时间复杂度问题 下面理解的时候可以将n理解为length
最好情况下在表尾插入即in1后移语句不会执行时间复杂度为T(n)0(1);最坏情况在表头插入即i1后移n次时间复杂度为0n平均情况p1/(n1)时间复杂度为0n
2、删除操作
删除顺序表L中第i个位置的元素若成功则返回true并将被删除的元素返回否则返回false
判断i的值是否正确取删除的元素将被删除元素后面的所有元素依次向前移动一位
bool ListDelete(SqList L, int i, ElemType e) {if (i1 || iL.length)return false;e L.data[i - 1];for (int j i; j L.length; j)L.data[j - 1] L.data[j];L.length--;return true;
}时间复杂度
最好情况删除表尾元素in无序移动时间复杂度为0(1)最坏情况删除表头元素i1需要移动第一个元素外所有的元素时间复杂度为0n平均情况时间复杂度为0n
3、按值查找
在顺序表查找第一个元素值等于e的元素并发回其位序
int LocateElem(SqList L, ElemType e) {for (int i 0; i L.length; i) {if (L.data[i] e)return i 1;}return 0;
}时间复杂度
最好情况第一个元素就是在表头T(n)0(1)最坏情况查找元素在表尾或者不存在时需要比较n次时间复杂度为0(n)平均情况T(n)0(n)
缺点
顺序表的移动、删除需要移动很多的元素影响运行效率