- 1
- 0
- 约3.83千字
- 约 18页
- 2024-01-18 发布于广西
- 举报
第二章线性表;2.1线性表的类型定义及根本操作;线性表的根本操作
初始化线性表L,InitList(L)
销毁线性表L,DestroyList(L),
清空线性表L,ClearList(L),
判断线性表L是否为空ListEmpty(L)
求线性表L的长度ListLength(L)
取线性表L的第i个元素,GetElem(L,i,e)
检索线性表L中元素e:LocateElem(L,e,compare())
返回线性表L中元素e的直接前驱元素:PriorElem(L,cur_e,prio_e)
返回线性表L中元素e的直接后继元素:NextElem(L,cur_e,next_e)
在线性表L的第i个元素之前插入元素ListInsert(L,i,e)
删除线性表L中的第i个元素删除元素ListDelete(L,i,e)
遍历线性表L:依次对L的每个元素调用visit(),ListTraverse(L,visit());抽象数据类型
ADTList{
数据对象:D={ai|ai?ElemSet,I=1,2,…n,n?0}
数据关系:R={ai-1,ai|ai-1,ai?D,I=2,3,…,n}
根本操作:InitList(L),
DestroyList(L),ClearList(L),
ListEmpty(L),ListLength(L),
GetElem(L,I,e),
LocateElem(L,e,compare())
PriorElem(L,cur_e,prio_e)
NextElem(L,cur_e,next_e)
ListInsert(L,I,e),ListDelete(L,I,e)
ListTraverse(L,visit())
};2.2线性表的顺序表示和实现;顺序表的特点;表示方法:
在高级语言中,用一维数组表示:
表示方法:
constLIST_INIT_SIZE=100;//表初始分配空间
constLISTINCREMENT=10;//空间分配增量
typedefstruct{ElemType*elem;//存储空间
intlength;//当前长度
intlistsize;//当前存储容量
}SqList;
注意:
1.数组指针elem指示线性表的基地址,length:线性表的当前长度。
2.C语言数组的下标从0开始,即数组中的第i个元素为L.elem[i-1];根本操作的实现:
〔1〕初始化线性表:为顺序表分配一个预定义大小的数组空间,并将线性表的初始长度设为0
StatusInitList_Sq(SqListL)
{//构造空表L
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*
sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
returnOK;
}//InitList_Sq;〔2〕线性表的插入——插入一个元素
在线性表的第i个位置上插入一个新的元素
分析:即在第i-1个元素和第i个元素之间插入
插入的步骤:将i个元素后移,即将第i个元素之后的所有元素后移;将新的元素放置在第i个位置;
考虑的问题:存储空间
;StatusListInsert_Sq(SqListL,inti,ElemTypee)
{//在顺序表L中第i个元素位置插入新元素e,
if(i1||iL.length+1)returnERROR;//非法的位置
if(L.length=L.listsize)error(‘OVERFLOW’);
for(j=L.length-1;j=i-1;--j)L.elem[j+1]=L.elem[j];
原创力文档

文档评论(0)