顺序表示意图
注意 :逻辑位序和物理位序相差1
#define MAXSIZE 100
typedef struct{
ElemType* elem;
int length;
}SqList;
SqList l;//定义变量l,l是SqList这样的类型,l是一个顺序表
线性表的基本操作
补充:操作算法中用到的预定义常量和类型
操作
算法【2.1】线性表L的初始化
Status InitList_sq(SqList &L){
//构造一个空的顺序表L
L.elem = new ElemType[MAXSIZE];、
//为顺序表分配空间
if(!L.elem)exit(OBERFLOW);
//储存分配失败,返回 -2
L.length = 0;
//空表长度为0
return 0;//成功返回0
}
销毁线性表and清空
void DestroyList(SqList &L){
if(L.elem)delete L.elem;
}
void ClearList(SqList &L){
L.length = 0;
}
算法【2.2】顺序表的取值
算法【2.3】顺序表的查找
-
在线性表L中查找与指定值e相同的数据元素的位置
-
从表的一端开始,逐个进行记录的关键字和给定值的比较,找到,返回该元素的位置序号,没有找到,返回0;
顺序查找算法分析
假设每一个记录的查找概率相同:Pi = 1 / n
最后可以的到 ASL =(n+1)/2顺序表的插入
三种情况
-
插入位置在最后
-
插入位置在中间
-
插入位置在最后
算法【2.4】顺序表的插入
Status ListInsert_Sq(SqList &L,int i,ElemType e){
if(i<1||i>L.length+1) return ERROR;
if(L.length == MAXSIZE) return ERROR;
for( int j=L.length -1;j>=i-1;j--){
L.elem[j+1] = L.elem[j];
}
L.elem[i -1] = e;
L.length++;
}
算法分析
顺序表的删除
算法【2.5】顺序表的删除算法实现
顺序表得删除算法分析