數(shù)據(jù)結(jié)構(gòu)課程綜合實訓(xùn)報告_第1頁
數(shù)據(jù)結(jié)構(gòu)課程綜合實訓(xùn)報告_第2頁
數(shù)據(jù)結(jié)構(gòu)課程綜合實訓(xùn)報告_第3頁
數(shù)據(jù)結(jié)構(gòu)課程綜合實訓(xùn)報告_第4頁
數(shù)據(jù)結(jié)構(gòu)課程綜合實訓(xùn)報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

線性表的逆置(數(shù)據(jù)結(jié)構(gòu)課程綜合實訓(xùn)報告)綜合實訓(xùn)報告:(一).問題的描述:

不同存儲結(jié)構(gòu)實現(xiàn)線性表的就地逆置,線性表的就地逆置就是在原表的存儲空間內(nèi)將線性表(a1,a2,…,an-1,an))逆置為(an,an-1,…,a2,a1)。(二).數(shù)據(jù)結(jié)構(gòu)的設(shè)計:

由于線性表在內(nèi)存中是線性存儲的,故設(shè)計其數(shù)據(jù)結(jié)構(gòu)類型如下:以順序存儲方式建立順序表:typedefstruct{intdata[maxsize];intlast;}SeqList;以鏈?zhǔn)酱鎯Ψ绞浇⒌膯捂湵恚簍ypedefstructNode{intdata;structNode*next;}Node;說明:由于本實驗重在算法的實現(xiàn),故將線性表設(shè)計的很簡單,以便于操作.(三).函數(shù)功能、參數(shù)說明及概要設(shè)計:1.函數(shù)ReverseOrder(SeqList*L)功能說明:實現(xiàn)順序表在內(nèi)存中的逆置.算法設(shè)計:voidReverseOrder(SeqList*L){PrintOrde(L);inti;intj;for(i=0,j=L->last;i<j;i++,j--){L->data[i]^=L->data[j]^=L->data[i]^=L->data[j];//值互換}PrintOrder(L);printf("順序表逆置成功!\n");}2.函數(shù)PrintOrde(SeqList*L)功能說明:從屏幕依次輸出順序表的成員。算法設(shè)計:PrintOrder(L);printf("順序表逆置成功!\n");}//尾插法建單鏈表voidCreateChain(Node*H){Node*s;Node*p;//動態(tài)指向表尾p=H;3.函數(shù)ReverseChain(Node*H)功能說明:實現(xiàn)單鏈表在內(nèi)存中的逆置.算法設(shè)計:.voidReverseOrder(SeqList*L){PrintOrde(L);inti;intj;for(i=0,j=L->last;i<j;i++,j--){L->data[i]^=L->data[j]^=L->data[i]^=L->data[j];//值互換}PrintOrder(L);printf("順序表逆置成功!\n");}4.函數(shù)PrintChain(Node*H)功能說明:從屏幕依次輸出單鏈表的成員.算法設(shè)計:voidPrintChai(Node*H){printf("逆置前單鏈表為:\n");Node*p;p=H->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}//利用順序遍歷同時用頭插法重建單鏈表5、程序代碼設(shè)計如下:#include<iostream>#include<stdio.h>#include<stdlib.h>#definemaxsize1000typedefstruct{intdata[maxsize];intlast;}SeqList;typedefstructNode{intdata;structNode*next;}Node;voidPrint(SeqList*L,Node*H);voidChoose(intchoice,SeqList*L,Node*H);voidCreateOrder(SeqList*L);voidPrintOrder(SeqList*L);voidReverseOrder(SeqList*L);voidCreateChain(Node*H);voidPrintChain(Node*H);voidReverseChain(Node*H);intmain(void){SeqListL;SeqList*p;p=&L;L.last=-1;//初始化Node*H;H=(Node*)malloc(sizeof(Node));H->next=NULL;//初始化Print(p,H);while(true){printf("按enter鍵繼續(xù)...");getchar();getchar();system("cls");Print(p,H);}return0;}voidPrint(SeqList*L,Node*H){intchoice;printf("這是第六組的大作業(yè)\n");printf("組員:\n");printf("常玲玲馬慧欽楊弘揚\n");printf("瞿霞軍梅春艷付月\n");printf("---------------------\n");printf("題目:線性表的逆置\n");printf("問題描述:\n");printf("利用線性表原有的存儲空間將線性表\n");printf("(a1,a2,…,an-1,an)\n");printf("逆置為\n");printf("(an,an-1,…,a2,a1)\n");printf("---------------------\n");printf("1.建立新單鏈表。\n");printf("2.打印當(dāng)前單鏈表。\n");printf("3.將單鏈表逆置。\n\n");printf("4.建立新順序表。\n");printf("5.打印當(dāng)前順序表。\n");printf("6.將順序表逆置\n\n");printf("7.按其它任意鍵退出。\n");printf("---------------------\n");printf("請選擇你要的操作:");scanf("%d",&choice);Choose(choice,L,H);}voidChoose(intchoice,SeqList*L,Node*H){switch(choice){case4:CreateOrder(L);break;case5:PrintOrder(L);break;case6:ReverseOrder(L);break;case1:CreateChain(H);break;case2:PrintChain(H);break;case3:ReverseChain(H);break;default:exit(0);}}voidCreateOrder(SeqList*L){intn;inti;while(1){printf("請輸入順序表長度:");scanf("%d",&n);if(n>0){break;}else{printf("Error:順序表的長度必須大于零!\n");}}printf("請輸入順序表元素:\n");L->last=n-1;for(i=0;i<n;i++){scanf("%d",&L->data[i]);}voidPrintOrder(SeqList*L){inti;if(L->last==-1){printf("當(dāng)前順序表為空。\n");}else{printf("當(dāng)前順序表為:\n");for(i=0;i<=L->last;i++){printf("%d",L->data[i]);}printf("\n");}}voidPrintOrde(SeqList*L){inti;if(L->last==-1){printf("當(dāng)前順序表為空。\n");}else{printf("逆置前順序表為:\n");for(i=0;i<=L->last;i++){printf("%d",L->data[i]);}printf("\n");}}voidReverseOrder(SeqList*L){PrintOrde(L);inti;intj;for(i=0,j=L->last;i<j;i++,j--){L->data[i]^=L->data[j]^=L->data[i]^=L->data[j];//值互換}PrintOrder(L);printf("順序表逆置成功!\n");}//尾插法建單鏈表voidCreateChain(Node*H){Node*s;Node*p;//動態(tài)指向表尾p=H;intn;inti;H->next=NULL;//初始化,以確保重復(fù)建表的無誤?。。。?!//輸入N,并判斷N是否合法while(true){printf("請輸入單鏈表長度:");scanf("%d",&n);if(n>0){break;}else{printf("Error:單鏈表的長度必須大于零!\n");}}printf("請輸入單鏈表:\n");for(i=0;i<n;i++){s=(Node*)malloc(sizeof(Node));scanf("%d",&s->data);s->next=p->next;p->next=s;p=p->next;}printf("成功創(chuàng)建新單鏈表!\n");PrintChain(H);}voidPrintChain(Node*H){printf("此時單鏈表為:\n");Node*p;p=H->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}voidPrintChai(Node*H){printf("逆置前單鏈表為:\n");Node*p;p=H->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}//利用順序遍歷同時用頭插法重建單鏈表voidReverseChain(Node*H){PrintChai(H);Node*h;Node*p;Node*temp;h=(Node*)malloc(sizeof(Node));h->next=NULL;//初始化p=H->next;while(p!=NULL){temp=p->next;p->next=h->next;h->next=p;p=temp;//p=p->next}H->next=h->next;//將新表的頭指針賦給原頭指針(實現(xiàn)逆序)PrintChain(H);printf("單鏈表逆置成功!\n");}(四).數(shù)據(jù)結(jié)構(gòu)課程綜合實訓(xùn)報告感想:程序的具體實現(xiàn),有利于我們更好的理解數(shù)據(jù)結(jié)構(gòu)的知識,是對知識的具體化,要更加深入的學(xué)習(xí),需要學(xué)會將知識具體化。我們老師講的很好,但是我自己覺得自己并沒有下大功夫去好好研究學(xué)習(xí),雖然自己覺得這門課很重要,要想達(dá)到自己理想的水平還很遠(yuǎn),不過既然認(rèn)識到了自己的不足,就應(yīng)該好好去學(xué)習(xí),多看資料,多思考?,F(xiàn)在要讓我說學(xué)習(xí)后有什么感想,有什么經(jīng)驗可以拿來說說,我還真不敢說,因為自己學(xué)的很粗略,沒有自己獨特的見解。我自己覺得最主要的還是應(yīng)該養(yǎng)成較好的編程思想,雖然自己說不出來什么大的道

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論