2023年計算機本科數(shù)據(jù)結構與算法實驗指導書_第1頁
2023年計算機本科數(shù)據(jù)結構與算法實驗指導書_第2頁
2023年計算機本科數(shù)據(jù)結構與算法實驗指導書_第3頁
2023年計算機本科數(shù)據(jù)結構與算法實驗指導書_第4頁
2023年計算機本科數(shù)據(jù)結構與算法實驗指導書_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

實驗一線性表的實驗一、實驗目的1、掌握用Visua1C++6.。上機調試順序表的基本方法;2、掌握順序表的基本操作,插入、刪除、查找、以及有序順序表的合并等算法的實現(xiàn);3、掌握用VisualC++6.0上機調試單鏈表的基本方法;4、掌握單鏈表的插入、刪除、查找、求表長以及有序單鏈表的合并算法的實現(xiàn);刪除、查找算法的實現(xiàn)。請同學們自己設計主函數(shù)和部分算法,調用5、進一步掌握循環(huán)單鏈表和雙鏈表的插入二、實驗內容刪除、查找算法的實現(xiàn)。請同學們自己設計主函數(shù)和部分算法,調用下面是順序表的部分基本操作實現(xiàn)的算法,這些算法,完畢下面的實驗任務。/*常用的符號常量定義*/defineOK1defincERROR0defineMAXSIZE10defineLISTJNIT_SIZE10SdefineLISTINCREMENT10defineTRUE1defineFALSE0ttdefineOK1definoERROR0defineSUCCESS1defineUNSUCCESS0defineDUPLICATE-1ttdcfineMLLKEY0//0為無記錄標志defineN10//數(shù)據(jù)元素個數(shù)if(n)printf(*SuccesstoCreateaLinkList!\n");elseprintf("ANULLLinkListhavebeencreated!\n");)//endofGreatcList()function1、順序表基本操作的實現(xiàn)。規(guī)定生成順序表時.,可以鍵盤上讀取元素,用順序存儲結構實現(xiàn)存儲。2、已知順序表la和1b中的數(shù)據(jù)元素按非遞減有序排列,將la和1b表中的數(shù)據(jù)元素,合并成為?個新的順序表lc,1c中的數(shù)據(jù)元素仍按非遞減有序排列,并且不破壞la和1b表。3.從有序順序表A中刪除那些在順序表B和順序表C中都出現(xiàn)的元素.4、將?順序存儲的線性表(設元素均為整型量)中所有零元素向表尾集中,其他元素則順序向表頭方向集中。若輸入:1230050478則輸出:12354780005、單鏈表基本操作的實現(xiàn)。規(guī)定生成單鏈表時,可以鍵盤上讀取元素,用鏈式存儲結構實現(xiàn)存儲。6、已知單鏈表la和1b中的數(shù)據(jù)元素按非遞減有序排列,將la和1b中的數(shù)據(jù)元素,合并為一個新的單鏈表1c,lc中的數(shù)據(jù)元素仍按非遞減有序排列。規(guī)定①不破壞la表和1b表的結構。②破壞la表和1b表的結構。7、編程實現(xiàn)兩個循環(huán)單鏈表的合并。8、線性表的逆置:設有一個線性表(eO,e1,-,en-2,en-|),請編寫一個函數(shù)將這個線性表原地逆置,即將線性表內容置換為(en-1,en-2,…,el,eO)。線性表中的數(shù)據(jù)可認為整數(shù)、字符或字符串,試分別采用順序存儲結構和鏈式結構來實現(xiàn)。9、約瑟夫環(huán)的實現(xiàn):設有n個人圍坐一圈,用整數(shù)序列1,2,3,……,n表達順序圍坐在圓桌周邊的人,現(xiàn)從某個位置s上的人開始報數(shù),數(shù)到m的人出列,接著從出列的下一個人又從1開始重新報數(shù),數(shù)到m的人出列,如此下去,直到所有人都出列為此。試設計擬定他們的出列順序序列的程序。如n=8,m=4,s=1時,設每個人的編號依次為1,2,3,-開始報數(shù),則得到的出列順序為4,8.5,2,1,3,7,6。檢查程序的對的性和健壯性。(1)采用數(shù)組表達作為求解過程中使用的數(shù)據(jù)結構。采用單向循環(huán)鏈表作為存儲結構模擬整個過程,循環(huán)鏈表可不設頭節(jié)點,必須注意空表和非空表的界線。#defineEQ(a,b)((a)==(b))#defineLT(a,b)((a)<(b))efineLQ(a,b)((a)<=(b))/*定義ElemType為int或別的自定義類型*/typedefintEIcmType;/*順序存儲類型*/typedefstruct{int*clcm;?int1ength;?intlistsize;}SqList;/*構造一個空線性表算法*/intInitList_Sq(SqList&L)//InitList_Sq()function{//Inititia1aSq_Liste1cm=(E1emType*)ma11oc(LIST_INTT_STZE*sizcof(ElemType));?if(!L.elcm)return(0);?L.Iength=0;L.listsize=LIST_INIT_SIZE;8return(1);}//endofInitList_Sq()function/*從順序表中查找與給定元素值相同的元素在順序表中的位置*/intLocaleE1em_Sq(SqListL,ElemTypee)//LocateElemSq0sub-function{inti=1;int*p=L.elem;whi1e(i<=L.length&&*p++!=e)++i;if(i<=L.1ength)return(i);e1sereturn(ERROR);}//LocateE1cm_Sq()end/*向順序表中插入元素*/intListinsert_sq(SqList&L,inti,inte)//ListInsert_sq(){if(i<111i>L.1ength+1)//i(location)isi1legal{printf("Initialfailure!\n11):return(ERROR);)if(L.]cngth>=L1istsize)//insertintotheendoftheSqlist{ElemType*Newbase;Newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(E1emType));if(!Newbase){printf(*0verf1ow!\n*);8return(ERROR);L.elem=Newbase:L.1istsize+=LISTINCREMENT;int*p,*q;q=&(L.elcm[i—1]);//qpointatthee1ementbeforetheinsertedonefor(p=&(L.elcm[L.1cngth-1]);p>=q;—p)?//movethedement*(p+1)=*p;*q=e;++L.1ength:rcturn(OK);}//ListInser_sq()end/*從順序表中刪除元素*/voidListDe1eteSq(SqList&L,inti,int&e)//ListDelete_Sq0function(int*p,*q;if((i<1)||(i>L.1ength))(printf(l4%disOverFlow!\n",i);gexit(0);。}p=&(L.elem[i-l]);e=*p;q=L.elem+L.length-1;for(++p:p<=q;++p)*(P—1)=*p;-L.1ength;Printf(*'SuccesstoDe1eteSq_list!\n*);}//endofListDc1ete_Sq()function/*有序順序表的合并*/intMerge_Sq(SqList&A,SqList&B,SqList&C)//Merge_Sq()function{//MergetheSqListAandBioCC.listsize=C.1ength=A.length+B.1ength;C.clem=(EIcmType*)ma1loc(C.listsizc*sizcof(ElcmType));if(IC.elem){printf("OverF1ow!\n");//fai1uretoa11ocateroominRAMreturn(0);?};inti=0,j=0://iandjistheSubscriptofA.elem[]ande1cm[]intk=0;//kistheSubscriptofelem[]whi1e((i<A.Iength)&&(j<B.Iength))//Tomergewheni<=A.Iengthandj>=B.1ength。if(A.elem[i]<=B.e1em[j])C.elem[k]=A.e1em[i]:i++;k++;?>}//endofifelse?{C.e1em[k]=B.elem[j];j++:k++;?)//endofelsewhile(i<A.length)//inserttherestofSqListA{?>C.clem[k]=A,c1cm[i];。i++;k++;?}//endofwhi1ewhi1c(j<B.1ength)//inserttherestofSqListB°{£.clem[k]=B.elem[j];j++;k++:printf(*SuccesstoMergcAandB!\n");return(1):}//endofMerge_Sq()function下面是鏈表的部分基本操作實現(xiàn)的算法,請同學們自己設計主函數(shù)和部分算法,調用這些算法,完畢下面的實驗任務。/*定義ElemType為int或別的自定義類型*/typedefintElemType;/*鏈式存儲類型//typedefstruetLNode{?ElemTypedata;~structLNode*next;}LNode,*LinkList;/*單鏈表的取元素*/intGetElem_L(LinkListL,inti,int&e)//GetElem_L()function{//ListheHeadPointerofLinkListwithHeadNode,whentheNo.iexist,assignthe//va1uetovariab1eeandreturn"OK!*otherwisereturnError!*LNode*p;intj=l;p=L->next:while(p&&j<i){p=p->next:++j:}if(!plU>i){printf(*TheNO.%delementdoesnotexist!\ni):cxit(0);}//endofifc=p->data;return(e);}//endofGetE1cm_L()function/*單鏈表的插入元素*/intListInsert_L(LinkList&L,inti,inte)//ListInsert_L()sub-function{LNode*p=L;intj=0;//findthe1ocation{p=p->next;++j:)if(!p||j>i—l)?//outoflocation{printf(*Error!The1ocationisillegal!\n"):return(ERROR);)LNode*s;s=(Linklist)malloc(sizeof(LNode));//createnewLNodes->data=e;s->next=p—>next;p->next=s;return(OK):}//ListInsertL()end/*單鏈表的蒯除元素*/intListDc1ete_L(1.inkList&L,inti,int&c)//ListDelete_L()function{//DeletetheNO.ielementofLinkListandreturnbyvariableeLNode*p,*q;intj=0:P=L;whi1e(p->next&&j<i-1)(p=p->next;+4-j;}if(!p||j>i-D{pr

溫馨提示

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

評論

0/150

提交評論