数据结构学习笔记-day3
Day3
一、线性表的定义和特点
由n(n>=0)个数据特性相同的元素构成的有限序列称为线性表。
N为线性表的长度,当n=0时,称其为空表。
二、线性表的顺序表示和实现
在C语言中可用动态分配的一维数组表示线性表:
#define MAXSIZE 100; //顺序表可能达到的最大长度
Typedef struct{
ElemType *elem;
//存储空间的基地址
Int length; //当前长度
}SqList; //顺序表的结构类型为SqList
注.(1)数组空间通过动态分配初始化得到,初始化完成后指针elem指向顺序表的基地址;
(2)元素类型定义中的ElemType数据类型是为了描述统一而自定的,可以根据需要确定为具体的类型。
三、线性表的基本操作
1.初始化
算法描述:
Status initlist(sqlist &L)
{//构造一个顺序表L
L.elem=new elemtyoe[MAXSIZE];
If(!L.elem) exit(OVERFLOW);
L.length=0;
Return OK;
}
2.取值(顺序存储有随机存取的特点)
算法描述:
Status getelem(sqlist L,int I,elemtype &e){
If(i<1||i>L.length) return ERROR;
e=L.elem[i-1];
return OK;
}
算法分析:T(n)=O(1);
3.查找
算法描述:
Int locateelem(sqlist L,elemtype e){
for(i=0;i<L.length;i++)
if(L.elem[i]==e) return i+1;
return 0;
}
算法分析:在查找时,为确定元素在顺序表中的位置,需要与给定值进行
比较的元素个数的期望值称为查找算法在查找成功时的平均查找长度(ASL)。
ASL=(n+1)/2
可见顺序表按值查找算法的T(n)=O(n)
4.插入
算法描述:
Status listinsert(sqlist L;int I;elemtype e){
If((i<1)||(i>L.lengh+1)) return ERROR;
If(L.length==MAXSIZE) return ERROR;
for(j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
Return OK;
}
算法分析:Eins为在长度为n的线性表中插入一个元素时所需移动元
素次数的期望值(平均次数)。
Eins=n/2
可见顺序表插入算法的T(n)=O(n)
5.删除
算法描述:
Status listdelete(sqlist &L,int i){
If(i<1||i>L.length) return ERROR;
for(j=I;j<L.length;j++)
L.elem[j-1]=L.elelm[j];
--L.length;
return OK;
}
算法分析:Edel为在长度n的线性表中删除一个元素时所需移动元素次数的期望值。
Edel=(n-1)/2
可见顺序表删除算法的T(n)=O(n)