- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ch2补充
线性表的动态分配顺序存储结构(用一维数组)
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList
顺序线性表的操作
顺序表容易实现访问操作,可随机存取元素。但插入和删除操作主要是移动元素。
⑴初始化操作
算法思想:构造一个空表。设置表的起始位置、表长及可用空间。
算法:
Status InitList_Sq(SqList L){
L.elem=(ElemType )malloc(LIST_INIT_SIZE*sizeof(ElemType));
If (!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize= LIST_INIT_SIZE;
Return OK;
}//InitList_Sq
⑵插入操作
算法思想:在第i个位置上插入一个新元素,将第n 至(i+1)个元素逐一向后移动一个位置。
算法:
Status ListInsert_Sq(SqList L, int i, ElemType e )
if (i1||iL.length+1) return ERROR;
if (L.length=L.listsize){
newbase=(ElemType )realloc(L.elem,(L.listsize+LISTINCREMENT)sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+= LISTINCREMENT;
}
q=(L.elem[i-1]);
for (p=(L.elem[L.length-1]);p=q;--p)*(P+1)=*p;
*q=e;
++L.length;
return OK;
}//ListInsert_Sq
静态单链表
有些高级语言没有指针,我们可以用数组来表示单链表,在数组中以整型游标来代替指针。这种用数组描述的链表称为静态链表。
存储结构:
#define MAXSIZE 1000
typedef struct{
ElemType data;
Int cur;
}component, SLinklist[MAXSIZE];
S[i].cur 指示第i+1个结点的位置。
静态链表的操作和动态链表相似。以整型游标代替动态指针。
int LocateElem_SL(SLinkList L, ElemType){
//在静态链表L中查找值为e的元素。
//若找到,则返回它在L中的位序,否则返回0。
i=S[0].cur;
while(i S[i].data!=e) i=S[i].cur;
return i;
}//LocateElem_SL
1
静态单链表
文档评论(0)