版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
returnOK;ElemTypecur_e,ElemType*pre_e){ElemTypee){
9inti=2;ElemType*newbase,*q,*p;
《數(shù)據(jù)結構》的全)
部代碼實現(xiàn)(C語言StatusListEmpty(SqListL){ElemType*p=L.elem+1;if(i<1||i>(*L).length+
第二章線性表、鏈表if(L.length==0)while(i<=L.length&&*p!=1)
線性表的動態(tài)分配順序存儲結構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));線性表的靜態(tài)單鏈表存儲結構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實現(xiàn)算法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){設立尾指針的單循環(huán)鏈表的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)雙鏈循環(huán)線性表的基本操作(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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年社會熱點與現(xiàn)象探討分析題集
- 2026年金融科技發(fā)展與金融安全知識測試題
- BIM在建筑維護管理中的應用方案
- 公路高效能施工管理方案
- 燃氣工程招標與合同管理方案
- 工地物資返工率控制方案
- 廚房布局功能性設計方案
- 管線施工團隊建設方案
- 道路施工運營管理優(yōu)化方案
- 酒店房間翻新方案
- 2026中國電信四川公用信息產(chǎn)業(yè)有限責任公司社會成熟人才招聘備考題庫帶答案詳解
- 2026云南大理州事業(yè)單位招聘48人參考題庫必考題
- 《公共科目》軍隊文職考試新考綱題庫詳解(2026年)
- 2025至2030中國啤酒市場行業(yè)調(diào)研及市場前景預測評估報告
- 報警受理工作制度規(guī)范
- 嘉賓邀請合同書
- 多源信息融合驅動的配電網(wǎng)狀態(tài)估計:技術革新與實踐應用
- 華電集團企業(yè)介紹
- 年度工作總結PPT模板
- 7KW交流交流充電樁說明書
- 物理必修一綜合測試題
評論
0/150
提交評論