




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
returnOK;ElemTypecur_e,ElemType*pre_e){ElemTypee){
9inti=2;ElemType*newbase,*q,*p;
《数据结构》的全)
部代码实现(C语言StatusListEmpty(SqListL){ElemType*p=L.elem+1;if(i<1||i>(*L).length+
第二章线性表、链表if(L.length==0)while(i<=L.length&&*p!=1)
线性表的动态分配顺序存储结构returnTRUE;cur_e){returnERROR;
#defineLIST_INIT__SIZE10elseP++;if((*L).length>=
#defineLISTINCREMENT2returnFALSE;i++;(*L).listsize){
typedefstruct{})newbase=(ElemType
ElemType*elem;intListLength(SqListL){if(i>L.length)*)realloc((*L).elem,
intlength;returnL.length;returnINFEASIBLE;((*L).listsize+LISTINCREMENT)*
intlistsize;)else{sizeof(ElemType));
}SqList;StatusGetElem(SqListL,inti,*pre_e=*--p;if(!newbase)
顺序表示的线性表的基本操作(12个)ElemType*e){returnOK;exit(OVERFLOW);
StatusInitList(SqList*L){if(i<1||i>L.length))(*L).elem=newbase;
(*L).elem=(ElemTypeexit(ERROR);}(*L).listsize+=
*)malloc(LIST_INIT_SIZE**e=*(L.elem+i-1);StatusNextElem(SqListL,LISTINCREMENT;
sizeof(ElemType));returnOK;ElemTypecur_e,ElemType*next_e))
if(!(*L).elem)){q=(*L).elem+i-1;
exit(OVERFLOW);intLocateElem(SqListL,ElemTypeinti=1;for(p=(*L).elem+
(*L).length=0;e,Status(*compare)(ElemTypeJElemType*p=L.elem;(*L).length-1;p>=q;--p)
(*L).listsize=ElemType)){while(i<L.length&&*p!=*(p+1)=*p;
LIST_INIT_SIZE;ElemType*p;cur_e){*q=e;
returnOK;inti=1;i++;++(*L).length;
)p=L.elem;P++;returnOK;
StatusDestroyList(SqList*L){while(i<=L.length)}
free((*L).elem);&&!compare(*p++Je))if(i==L.length)StatusListDelete(SqList*L,inti,
(*L).elem=NULL;++i;returnINFEASIBLE;ElemType*e){
(*L).length=0;if(i<=L.length)else{ElemType*p,*q;
(*L).listsize=0;returni;*next_e=*++p;if(i<1||i>(*L).length)
returnOK;elsereturnOK;returnERROR;
)return0;}p=(*L).elem+i-1;
StatusClearList(SqList*L){}}*e=*pj
(*L).length=0;StatusPriorElem(SqListL,StatusListlnsert(SqList*L,inti,q=(*L).elem+(*L).length-
1;LinkListq;}if(q->data==cur_e){
for(++p;p<=q;++p)while(*L){StatusGetElem(LinkListL,inti,*pre_e=p->data;
*(p-1)=*p;q=(*L)->next;ElemType*e){returnOK;
(*L).length--;free(*L);intj=1;)
returnOK;*L=q;LinkListp=L->next;p=q;
})while(p&&j<i){)
StatusListTraverse(SqListL,returnOK;p=p->next;returnINFEASIBLE;
void(*vi)(ElemType*)){}j++;)
ElemType*p;StatusClearList(LinkListL){}StatusNextElem(LinkListL,
inti;LinkListp,q;if(!p||j>i)ElemTypecur_e,ElemType*next__e)
p=L.elem;p=L->next;returnERROR;{
for(i=1;i<=L.length;i++)while(p){*e=p->data;LinkListp=L->next;
vi(p++);q=p->next;returnOK;while(p->next){
printf("\n");free(p);)if(p->data==cur__e){
returnOK;p=q;intLocateElem(LinkListL,*next_e=
)}ElemTypee,p->next->data;
线性表的单链表存储结构L->next=NULL;Status(*compare)(ElemType.,returnOK;
structLNode{returnOK;ElemType)){}
ElemTypedata;}inti=0;p=p->next;
structLNode*next;StatusListEmpty(LinkListL){LinkListp=L->next;)
};if(L->next)while(p){returnINFEASIBLE;
typedefstructLNode*LinkList;returnFALSE;i++;}
单链表线性表的基本操作(12个)elseif(compare(p->datae))StatusListlnsert(LinkListL,int
StatusInitList(LinkList*L){returnTRUE;returni;ElemTypee){
*L=}p=p->next;intj=0;
(LinkList)malloc(sizeof(structintListLength(LinkListL){)LinkListp=L,s;
LNode));inti=0;return0;while(p&&j<i-1){
if(!*L)LinkListp=L->next;}p=p->next;
exit(OVERFLOW);while(p){StatusPriorElem(LinkListL,j++;
(*L)->next=NULL;i++;ElemTypecur_e,ElemType*pre_e){)
returnOK;p=p->next;LinkListq,p=L->next;if(!p||j>i-1)
}}while(p->next){returnERROR;
StatusDestroyList(LinkList*L){returni;q=p->next;s=
(LinkList)malloc(sizeof(struct)if(!*L)else
LNode));线性表的静态单链表存储结构exit(OVERFLOW);returnFALSE;
s->data=e;#defineMAXSIZE100(*L)->next=*L;}
s->next=p->next;typedefstruct{returnOK;intListLength_CL(LinkListL){
p->next=s;ElemTypedata;}inti=0;
returnOK;intcur;StatusDestroyList_CL(LinkList*L)LinkListp=L->next;
)}component,SLinkList[MAXSIZE];{while(p!=L){
StatusListDelete(LinkListL,int实现算法2.15、2.16的程序(3个)LinkListq,p=(*L)->next;i++;
i,ElemType*e){intMalloc(SLinkListspace){while(p!=*L){p=p->next;
intj=0;inti=space[0].cur;q=p->next;}
LinkListp=L,q;讦⑴free(p);returni;
while(p->next&&j<i-1){space[0].cur=P=q;)
p=p->next;space[i].cur;}StatusGetElem_CL(LinkListL,int
j++;returni;free(*L);i,ElemType*e){
}}*L=NULL;intj=1;
if(!p->next||j>i-1)voidFree(SLinkListspace,intk)returnOK;LinkListp=L->next->next;
returnERROR;{}if(i<=0||i>
q=p->next;space[k].cur=space[0].cur;StatusClearList_CL(LinkList*L)ListLength_CL(L))
p->next=q->next;space[0].cur=k;{returnERROR;
*e=q->data;}LinkListp,q;while(j<i){
free(q);voidDestroyList(){*L=(*L)->next;p=p->next;
returnOK;)p=(*L)->next;j++;
)线性表的双向链表存储结构while(p!=*L){}
StatusListTraverse(LinkListL,typedefstructDuLNode{q=p->next;*e=p->data;
void(*vi)(ElemType))ElemTypedata;free(p);returnOK;
(structDuLNode*prior^*next;p=q;}
LinkListp=L->next;}DuLNode,*DuLinkList;)intLocateElem_CL(LinkListL,
while(p){设立尾指针的单循环链表的12个基本操(*L)->next=*L;ElemTypee,
vi(p->data);作returnOK;Status(*compare)(ElemType,
p=p->next;StatusInitList_CL(LinkList*L){}ElemType)){
}*L=StatusListEmpty_CL(LinkListL){inti=0;
printf("\n");(LinkList)malloc(sizeof(structif(L->next==L)LinkListp=L->next->next;
returnOK;LNode));returnTRUE;while(p!=L->next){
i++;returnFALSE;DuLinkListq,p=(*L)->next;
if(compare(p->dataje)))q=p->next;while(p!=*L){
returni;StatusListInsert_CL(LinkList*Lp->next=q->next;q=p->next;
p=p->next;inti,ElemTypee){*e=q->data;free(p);
}LinkListp=(*L)->next,s;if(*L==q)p=q;
return0;intj=0;*L=p;)
}if(i<=0||i>free(q);free(*L);
StatusPriorElem__CL(LinkListL,ListLength_CL(*L)+1)returnOK;*L=NULL;
ElemTypecur_e,ElemType*pre_e){returnERROR;}returnOK;
LinkListq,p二L->next->next;while(j<i-1){StatusListTraverse_CL(LinkListL,)
q=p->next;p=p->next;void(*vi)(ElemType)){StatusClearList(DuLinkListL){
while(q!=L->next){j++;LinkListp=L->next->next;DuLinkListq,p=L->next;
if(q->data==cur_e){}while(p!=L->next){while(p!=L){
*pre__e=p->data;s=vi(p->data);q=p->next;
returnTRUE;(LinkList)malloc(sizeof(structp=p->next;free(p);
}LNode));)p=q;
p=q;s->data=e;printf("\n");)
q=q->next;s->next=p->next;returnOK;L->next=L->prior=L;
)p->next=s;)returnOK;
returnFALSE;if(p==*L)双链循环线性表的基本操作(14个))
)*L=s;StatusInitList(DuLinkList*L){StatusListEmpty(DuLinkListL){
StatusNextElem_CL(LinkListL,returnOK;*L=if(L->next==L&&L->prior==
ElemTypecur_e,ElemType*next_e)}(DuLinkList)malloc(sizeof(DuLNodL)
(StatusListDelete_CL(LinkList*Le));returnTRUE;
LinkListp=L->next->next;inti,ElemType*e){if(*L){else
while(p!=L){LinkListp=(*L)->next,q;(*L)->next=(*L)->prior=returnFALSE;
if(p->data==cur_e){intj=0;*L;}
*next_e=if(i<=0||i>returnOK;intListLength(DuLinkListL){
p->next->data;ListLength_CL(*L))}elseinti=0;
returnTRUE;returnERROR;returnOVERFLOW;DuLinkListp=L->next;
}while(j<i-1){}while(p!=L){
p=p->next;p=p->next;StatusDestroyList(DuLinkList*L)i++;
}j++;p=p->next;
}while(p!=L){inti,ElemTypee){}
returni;if(p->data==cur_e){DuLinkListp,s;voidListTraverse(DuLinkListL,
)*pre_e=if(i<1||i>ListLength(L)void(*visit)(ElemType)){
StatusGetElem(DuLinkListL,inti,p->prior->data;+1)DuLinkListp=L->next;
ElemType*e){returnTRUE;returnERROR;while(p!=L){
intj=1;)p=GetElemP(L,i-1);visit(p->data);
DuLinkListp=L->next;p=p->next;if(!p)p=p->next;
while(p!=L&&j<i){)returnERROR;)
p=p->next;returnFALSE;s=printf("\n");
j++;)(DuLinkList)malloc(sizeof(DuLNod}
)StatusNextElem(DuLinkListL,e));voidListTraverseBack(DuLinkList
if(p==L||j>i)ElemTypecur_e,ElemType*next_e)if(!s)L,void(*visit)(ElemType)){
returnERROR;(returnOVERFLOW;DuLinkListp=L->prior;
*e=p->data;DuLinkListp=L->next->next;s->data=e;while(p!=L){
returnOK;while(p!=L){s->prior=p;visit(p->data);
}if(p->prior->data==s->next=p->next;p=p->prior;
intLocateElem(DuLinkListL,cur_e){p->next->prior=s;}
ElemTypee,*next__e=p->data;p->next=s;printf("\n");
Status(*compare)(ElemType,returnTRUE;returnOK;}
ElemType)){)}带头结点的线性链表类型
inti=0;p=p->next;StatusListDelete(DuLinkListL,typedefstructLNode{
DuLinkListp=L->next;}inti,ElemType*e){ElemTypedata;
while(p!=L){returnFALSE;DuLinkListp;structLNode*next;
i++;)if(i<1||i>ListLength(L))}LNode,*Link,"Position;
if(compare(p->dataje))DuLinkListGetElemP(DuLinkListL,returnERROR;typedefstructLinkList{
returni;inti){p=GetElemP(L,i);Linkhead,tail;
p=p->next;intj;if(1p)intlen;
}DuLinkListp=L;returnERROR;}LinkList;
return0;for(j=1;j<=i;j++)*e=p->data;具有实用意义的线性链表的24个基本操
}p=p->next;p->prior->next=p->next;作
StatusPriorElem(DuLinkListL,returnp;p->next->prior=p->prior;StatusMakeNode(Link*p,ElemType
ElemTypecur_e,ElemType*pre_e){)free(p);e){
DuLinkListp=L->next->next;StatusListinsent(DuLinkListL,returnOK;*p=
(Link)malloc(sizeof(LNode));(*L).tail=(*L).head;StatusAppend(LinkList*L,Links)*q=(*L).tail;
if(!*p)(*L).len=0;{p->next=NULL;
returnERROR;}inti=1;(*L).tail=p;
(*p)->data=e;returnOK;(*L)•tail->next=s;(*L).len--;
returnOK;}while(s->next){returnOK;
}StatusDestroyList(LinkList*L){s=s->next;}
voidFreeNode(Link*p){ClearList(L);i++;StatusInsBefore(LinkList*L,
free(*p);FreeNode(&(*L).head);)Link*p,Links){
*p=NULL;(*L).tail=NULL;(*L).tail=s;Linkq;
)(*L).len=0;(*L).len+=i;q=RriorPos(*Lj*p);
StatusInitList(LinkList*L){returnOK;returnOK;if(!q)
Linkp;))q=(*L).head;
P=StatusInsFirst(LinkList*L,LinkPositionPriorPos(LinkListL,s->next=*p;
(Link)malloc(sizeof(LNode));h.Links){Linkp){q->next=s;
if(P){s->next=h->next;Linkq;*p=s;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 9《正确认识广告》(第2课时)教学设计-2024-2025学年道德与法治四年级上册统编版
- 2024-2025学年七年级历史上册 第三单元 秦汉时期:统一多民族国家的建立和巩固 第10课 秦末农民大起义教学设计 新人教版
- 8第九套广播体操6-7节5 教学设计-八年级体育与健康
- 《节电小专家:1 家庭用电情况调查》教学设计-2023-2024学年四年级下册综合实践活动沪科黔科版
- 2024秋八年级英语上册 Module 3 Sports Unit 2 This year we are training more carefully教学设计(新版)外研版
- 2024年秋七年级道德与法治上册 2.1 学习伴成长教学设计 新人教版
- 17 气体的体积和质量 教学设计-2024-2025学年科学三年级上册青岛版
- 七年级生物上册 第二单元 生物体的结构层次(没有细胞结构的微小生物)教学设计1 (新版)新人教版
- 15《八角楼上》第二课时教学设计-2024-2025学年二年级上册语文统编版
- 七年级语文上册 第四单元 13《济南的冬天》教学设计 冀教版
- 2024年重庆市中考语文试卷真题B卷(含答案逐题解析)
- 12清贫 公开课一等奖创新教学设计
- 高血压病人护理查房课件
- 长安汽车使用说明书
- (正式版)QBT 8009-2024 速冻春卷
- 移动互联网环境下用户隐私关注的影响因素及隐私信息扩散规律研究
- 工程振动分析与控制基础 第2版 课件 第5、6章 传递矩阵法、有限元法
- 《干簧管基础知识》课件
- 病毒感染导致的细胞周期调控异常
- 3D打印技术在航空航天领域的应用
- 【行政管理社会调查计划+调查记录表+调查报告5600字】
评论
0/150
提交评论