




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、順序表的建立與常用操作的算法(C語(yǔ)言實(shí)現(xiàn))#defineLIST_INIT_SIZE10/*線(xiàn)性表存儲(chǔ)空間的初始分配量*/*c2-1.h線(xiàn)性表的動(dòng)態(tài)分配順序存儲(chǔ)結(jié)構(gòu)*/#defineLISTINCREMENT2/*線(xiàn)性表存儲(chǔ)空間的分配增量*/typedefstructElemType*elem;/*存儲(chǔ)空間基址*/intlength;/*當(dāng)前長(zhǎng)度*/intlistsize;/*當(dāng)前分配的存儲(chǔ)容量(以sizeof(ElemType)為單位)*/SqList;StatusInitList(SqList*L)/*操作結(jié)果:構(gòu)造一個(gè)空的順序線(xiàn)性表*/(*L).elem=(ElemType*)mallo
2、c(LIST_INIT_SIZE*sizeof(ElemType);if(!(*L).elem)exit(OVERFLOW);/*存儲(chǔ)分配失敗*/(*L).length=0;/*空表長(zhǎng)度為0*/(*L).listsize=LIST_INIT_SIZE;/*初始存儲(chǔ)容量*/returnOK;StatusDestroyList(SqList*L)/*初始條件:順序線(xiàn)性表L已存在。操作結(jié)果:銷(xiāo)毀順序線(xiàn)性表L*/free(*L).elem);(*L).elem=NULL;(*L).length=0;(*L).listsize=0;/*bo2-1.c順序表(存儲(chǔ)結(jié)構(gòu)由c2-1.h定義)的基本操作(12個(gè)
3、)returnOK;StatusClearList(SqList*L)/*初始條件:順序線(xiàn)性表L已存在。操作結(jié)果:將L重置為空表*/(*L).length=0;returnOK;*/StatusListEmpty(SqListL)/*初始條件:順序線(xiàn)性表L已存在。操作結(jié)果:若L為空表,則返回TRUE否則返回FALSE*/if(L.length=0)returnTRUE;elsereturnFALSE;intListLength(SqListL)/*初始條件:順序線(xiàn)性表L已存在。操作結(jié)果:返回L中數(shù)據(jù)元素個(gè)數(shù)*/returnL.length;StatusGetElem(SqListL,inti,
4、ElemType*e)/*初始條件:順序線(xiàn)性表L已存在,1wiwListLength(L)*/*操作結(jié)果:用e返回L中第i個(gè)數(shù)據(jù)元素的值*/if(i<1|i>L.length)exit(ERROR);*e=*(L.elem+i-1);returnOK;intLocateElem(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType)/*初始條件:順序線(xiàn)性表L已存在,compare。是數(shù)據(jù)元素判定函數(shù)(滿(mǎn)足為1,否則為0)*/*操作結(jié)果:返回L中第1個(gè)與e滿(mǎn)足關(guān)系compare()的數(shù)據(jù)元素的位序。*/*若這樣的數(shù)據(jù)元素不存在,則返
5、回值為0。算法2.6*/ElemType*p;inti=1;/*i的初值為第1個(gè)元素的位序*/p=L.elem;/*p的初值為第1個(gè)元素的存儲(chǔ)位置*/while(i<=L.length&&!compare(*p+,e)+i;if(i<=L.length)returni;elsereturn0;StatusPriorElem(SqListL,ElemTypecur_e,ElemType*pre_e)/*初始條件:順序線(xiàn)性表L已存在*/*操作結(jié)果:若cur_e是L的數(shù)據(jù)元素,且不是第一個(gè),則用pre_e返回它的前驅(qū),*/*否則操作失敗,pre_e無(wú)定義*/inti=2;
6、ElemType*p=L.elem+1;while(i<=L.length&&*p!=cur_e)p+;i+;if(i>L.length)returnINFEASIBLE;else*pre_e=*-p;returnOK;StatusNextElem(SqListL,ElemTypecur_e,ElemType*next_e)/*初始條件:順序線(xiàn)性表L已存在*/*操作結(jié)果:若cur_e是L的數(shù)據(jù)元素,且不是最后一個(gè),則用next_e返回它的后繼,*/*否則操作失敗,next_e無(wú)定義*/inti=1;ElemType*p=L.elem;while(i<L.len
7、gth&&*p!=cur_e)i+;p+;Jif(i=L.length)returnINFEASIBLE;else*next_e=*+p;returnOK;StatusListInsert(SqList*L,inti,ElemTypee)/*初始條件:順序線(xiàn)性表L已存在,1WiWListLength(L)+1*/*操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)元素e,L的長(zhǎng)度加1*/ElemType*newbase,*q,*p;if(i<1|i>(*L).length+1)/*i值不合法*/returnERROR;if(*L).length>=(*L).lists
8、ize)/*當(dāng)前存儲(chǔ)空間已滿(mǎn),增加分配*/newbase=(ElemType*)realloc(*L).elem,(*L).listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase)exit(OVERFLOW);/*存儲(chǔ)分配失敗*/(*L).elem=newbase;/*新基址*/(*L).listsize+=LISTINCREMENT;/*增加存儲(chǔ)容量*/q=(*L).elem+i-1;/*q為插入位置*/for(p=(*L).elem+(*L).length-1;p>=q;-p)/*插入位置及之后的元素右移*/*(p+1)=*p;*q=
9、e;/*插入e*/+(*L).length;/*表長(zhǎng)增1*/returnOK;StatusListDelete(SqList*L,inti,ElemType*e)/*初始條件:順序線(xiàn)性表L已存在,1wiwListLength(L)*/*操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù)元素,并用e返回其值,L的長(zhǎng)度減1*/ElemType*p,*q;if(i<1|i>(*L).length)/*i值不合法*/returnERROR;p=(*L).elem+i-1;/*p為被刪除元素的位置*/*e=*p;/*被刪除元素的值賦給e*/q=(*L).elem+(*L).length-1;/*表尾元素的位置*/
10、for(+p;p<=q;+p)/*被刪除元素之后的元素左移*/*(p-1)=*p;(*L).length-;/*表長(zhǎng)減1*/returnOK;StatusListTraverse(SqListL,void(*vi)(ElemType*)/*初始條件:順序線(xiàn)性表L已存在*/*操作結(jié)果:依次對(duì)L的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)vi()。一旦vi()失敗,則操作失敗*/*vi()的形參加'&',表明可通過(guò)調(diào)用vi()改變?cè)氐闹?/ElemType*p;inti;p=L.elem;for(i=1;i<=L.length;i+)vi(p+);printf("n&qu
11、ot;);returnOK;/*main2-1.c檢驗(yàn)bo2-1.c的主程序*/#include"c1.h"typedefintElemType;#include"c2-1.h”#include"bo2-1.c”Statuscomp(ElemTypec1,ElemTypec2)/*數(shù)據(jù)兀素/Ute函數(shù)(平方關(guān)系)*/if(c1=c2*c2)returnTRUE;elsereturnFALSE;voidvisit(ElemType*c)/*ListTraverse()調(diào)用的函數(shù)(類(lèi)型要,致)*/printf("%d",*c);voidd
12、bl(ElemType*c)/*ListTraverse()調(diào)用的另函數(shù)(兀素值加倍)*/*c*=2;voidmain()SqListL;ElemTypee,e0;Statusi;intj,k;i=InitList(&L);printf("初始化L后:L.elem=%uL.length=%dL.listsize=%dn",L.elem,L.length,L.listsize);for(j=1;j<=5;j+)i=ListInsert(&L,1,j);printf("在L的表頭依次插入15后:*L.elem=");for(j=1;j&
13、lt;=5;j+)printf("%d",*(L.elem+j-1);printf("n");printf("L.elem=%uL.length=%dL.listsize=%dn",L.elem,L.length,L.listsize);i=ListEmpty(L);printf("L是否空:i=%d(1:是0:否)n",i);i=ClearList(&L);printf("清空L后:L.elem=%uL.length=%dL.listsize=%dn",L.elem,L.length,
14、L.listsize);i=ListEmpty(L);printf("L是否空:i=%d(1:是0:否)n",i);for(j=1;j<=10;j+)ListInsert(&L,j,j);printf("在L的表尾依次插入110后:*L.elem=");for(j=1;j<=10;j+)printf("%d",*(L.elem+j-1);printf("n");printf("L.elem=%uL.length=%dL.listsize=%dn",L.elem,L.lengt
15、h,L.listsize);ListInsert(&L,1,0);printf("在L的表頭插入0后:*L.elem=");for(j=1;j<=ListLength(L);j+)/*ListLength(L)為元素個(gè)數(shù)*/printf("%d",*(L.elem+j-1);printf("n");printf("L.elem=%u(有可能改變)L.length=%d(改變)L.listsize=%d(改變)n",L.elem,L.length,L.listsize);GetElem(L,5,&
16、;e);printf("第5個(gè)元素的值為:%dn",e);for(j=3;j<=4;j+)k=LocateElem(L,j,comp);if(k)printf("第個(gè)元素的值為%d的平方n",k,j);elseprintf("沒(méi)有值為%d的平方的元素n",j);for(j=1;j<=2;j+)/*測(cè)試頭兩個(gè)數(shù)據(jù)*/GetElem(L,j,&e0);/*把第j個(gè)數(shù)據(jù)賦給e0*/i=PriorElem(L,e0,&e);/*求e0的前驅(qū)*/if(i=INFEASIBLE)printf("元素d無(wú)前驅(qū)n
17、",e0);elseprintf("元素d的前驅(qū)為:%dn",e0,e);for(j=ListLength(L)-1;j<=ListLength(L);j+)/*最后兩個(gè)數(shù)據(jù)*/GetElem(L,j,&e0);/*把第j個(gè)數(shù)據(jù)賦給e0*/i=NextElem(L,e0,&e);/*求e0的后繼*/if(i=INFEASIBLE)printf("元素d無(wú)后繼n",e0);elseprintf("元素d的后繼為:%dn",e0,e);k=ListLength(L);/*k為表長(zhǎng)*/for(j=k+1;j>=k;j-)i=ListDelete(&L,j,&e);/*刪除第j個(gè)數(shù)據(jù)*/if(i=ERROR)printf("刪除第外數(shù)據(jù)失敗n",j);elseprintf("刪除的元素值為:dn",e);)printf("
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)管道安全監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)施
- 工業(yè)自動(dòng)化與機(jī)器人的未來(lái)趨勢(shì)
- 工業(yè)自動(dòng)化技術(shù)的發(fā)展
- 工業(yè)設(shè)計(jì)與產(chǎn)品創(chuàng)新關(guān)系探討
- 工作壓力管理方法與情緒調(diào)節(jié)能力培訓(xùn)教程
- 工程中質(zhì)量管理與控制方法
- 工作場(chǎng)合中的公眾講話(huà)藝術(shù)
- 工廠(chǎng)自動(dòng)化的家居智能化策略與實(shí)踐
- 工程機(jī)械中的數(shù)控技術(shù)應(yīng)用研究
- 工程造價(jià)在綠色機(jī)房建設(shè)中的應(yīng)用
- 神經(jīng)系統(tǒng)與運(yùn)動(dòng)控制課件
- 設(shè)計(jì)院應(yīng)用BIM建模標(biāo)準(zhǔn)規(guī)范
- 水平定向鉆監(jiān)理細(xì)則
- 戰(zhàn)略性績(jī)效管理體系設(shè)計(jì)實(shí)踐課件
- 電腦的認(rèn)識(shí) 完整版課件
- GB∕T 37201-2018 鎳鈷錳酸鋰電化學(xué)性能測(cè)試 首次放電比容量及首次充放電效率測(cè)試方法
- DB62∕T 2997-2019 公路工程工地建設(shè)標(biāo)準(zhǔn)
- 2021年河南中考復(fù)習(xí)專(zhuān)項(xiàng):中考材料作文(解析版)
- 提高學(xué)生課堂參與度研究的課題
- 中央司法警官學(xué)院招生政治考察表
- 原產(chǎn)地規(guī)則培訓(xùn)講座課件
評(píng)論
0/150
提交評(píng)論