2013級(jí)本科數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書_第1頁
2013級(jí)本科數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書_第2頁
2013級(jí)本科數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書_第3頁
2013級(jí)本科數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書_第4頁
2013級(jí)本科數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGE-《數(shù)據(jù)結(jié)構(gòu)與算法》實(shí)驗(yàn)指導(dǎo)書

實(shí)驗(yàn)一線性表的實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、掌握用VisualC++6.0上機(jī)調(diào)試順序表的基本方法。2、掌握順序表的基本操作,插入、刪除、查找、以及有序順序表的合并等算法的實(shí)現(xiàn)。3、掌握用VisualC++6.0上機(jī)調(diào)試單鏈表的基本方法。4、掌握單鏈表的插入、刪除、查找、求表長以及有序單鏈表的合并算法的實(shí)現(xiàn)。5、進(jìn)一步掌握循環(huán)單鏈表和雙鏈表的插入、刪除、查找算法的實(shí)現(xiàn)。二、實(shí)驗(yàn)內(nèi)容(一)完成下列程序,該程序生成一個(gè)如表1所示的順序表,并在第2個(gè)位置插入如表2所示的數(shù)據(jù)元素,刪除在第3個(gè)位置的數(shù)據(jù)元素,顯示順序表的每個(gè)元素。要求生成順序表時(shí),從鍵盤上讀取數(shù)據(jù)元素,用順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)存儲(chǔ)。表1學(xué)號(hào)姓名性別年齡2013001張珊女192013002李思女192013004王強(qiáng)男202013005趙括男212013006劉剛男20表22013003陳琪女19typedefstruct{DataTypelist[MaxSize]; intsize;}SeqList;voidListInitiate(SeqList*L) {L->size=0; /*定義初始數(shù)據(jù)元素個(gè)數(shù)*/}intListLength(SeqListL) {returnL.size;}intListInsert(SeqList*L,inti,DataTypex){intj;for(j=L->size;j>i;j--)L->list[j]=L->list[j-1]; L->list[i]=x; /*插入x*/ L->size++; /*元素個(gè)數(shù)加1*/ return1;}intListDelete(SeqList*L,inti,DataType*x) {intj;*x=L->list[i]; /*保存刪除的元素到x中*/for(j=i+1;j<=L->size-1;j++)L->list[j-1]=L->list[j];L->size--; /*數(shù)據(jù)元素個(gè)數(shù)減1*/return1;}intListGet(SeqListL,inti,DataType*x){if(i<0||i>L.size-1){printf("參數(shù)i不合法!\n"); return0;}else{ *x=L.list[i];return1;}}(二)已知順序表la和lb中的數(shù)據(jù)元素按非遞減有序排列,將la和lb表中的數(shù)據(jù)元素,合并成為一個(gè)新的順序表lc,要求lc中的數(shù)據(jù)元素仍按非遞減有序排列,并且不破壞la和lb表。(三)完成下列程序,該程序構(gòu)建如表3所示的帶頭結(jié)點(diǎn)的單鏈表h,在單鏈表h中第3個(gè)數(shù)據(jù)元素之前插入如表4所示的數(shù)據(jù)元素,刪除第4個(gè)數(shù)據(jù)元素。要求生成單鏈表時(shí),從鍵盤上讀取數(shù)據(jù)元素,用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn)存儲(chǔ)。表3員工編號(hào)姓名性別職位001張珊女文員002李思女銷售員004王強(qiáng)男經(jīng)理005趙括男秘書006劉剛男文員表42013003陳琪女19typedefstructNode{DataTypedata;structNode*next;}SLNode;voidListInitiate(SLNode**head){*head=(SLNode*)malloc(sizeof(SLNode));(*head)->next=NULL; }intListLength(SLNode*head){SLNode*p=head;intsize=0; while(p->next!=NULL) {p=p->next; size++; }returnsize;}intListInsert(SLNode*head,inti,DataTypex){SLNode*p,*q;intj;p=head;j=-1; while(p->next!=NULL&&j<i-1){p=p->next;j++; }if(j!=i-1){printf(“插入位置參數(shù)錯(cuò)!”); return0;}q=(SLNode*)malloc(sizeof(SLNode));q->data=x;q->next=p->next;p->next=q; return1;}intListDelete(SLNode*head,inti,DataType*x){SLNode*p,*s;intj;p=head;j=-1;while(p->next!=NULL&&p->next->next!=NULL&&j<i-1){p=p->next; j++;}if(j!=i-1){printf(“插入位置參數(shù)錯(cuò)!”); return0;}s=p->next;*x=s->data;p->next=p->next->next;free(s);return1;}intListGet(SLNode*head,inti,DataType*x){SLNode*p;intj;p=head;j=-1;while(p->next!=NULL&&j<i){p=p->next; j++; }if(j!=i){printf(“取元素位置參數(shù)錯(cuò)!”); return0;}*x=p->data;return1;}voidDestroy(SLNode**head){SLNode*p,*p1;p=*head;while(p!=NULL){p1=p;p=p->next;free(p1); }*head=NULL;}(四)已知單鏈表la和lb中的數(shù)據(jù)元素按非遞減有序排列,將la和lb中的數(shù)據(jù)元素,合并為一個(gè)新的單鏈表lc,lc中的數(shù)據(jù)元素仍按非遞減有序排列。要求不破壞la表和lb表的結(jié)構(gòu)。(五)約瑟夫環(huán)程序:設(shè)有N個(gè)人圍坐一圈,現(xiàn)從某個(gè)人開始報(bào)數(shù),數(shù)到M的人出列,接著從出列的下一個(gè)人開始重新報(bào)數(shù),數(shù)到M的人以出列,如此下去,直到所有人都出列為此。試設(shè)計(jì)確定他們的出列次序序列的程序。要求選擇單向循環(huán)鏈表作為存儲(chǔ)結(jié)構(gòu)模擬整個(gè)過程,并依次輸出列的各人的編號(hào)。如n=8,m=4時(shí),若從第一個(gè)人,設(shè)每個(gè)人的編號(hào)依次為1,2,3,…開始報(bào)數(shù),則得到的出列次序?yàn)?,8,5,2,1,3,7,6,實(shí)驗(yàn)二棧、隊(duì)列的實(shí)現(xiàn)及應(yīng)用一、實(shí)驗(yàn)?zāi)康?、掌握棧和隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),以便在實(shí)際背景下靈活運(yùn)用。2、掌握棧和隊(duì)列的特點(diǎn),即先進(jìn)后出與先進(jìn)先出的原則。3、掌握棧和隊(duì)列的基本操作實(shí)現(xiàn)方法。二、實(shí)驗(yàn)內(nèi)容(一)完成下列程序,該程序?qū)崿F(xiàn)棧的順序存儲(chǔ)結(jié)構(gòu),構(gòu)建順序棧(棧中的元素依次為R,S,Y,F(xiàn),C,T),依次進(jìn)行進(jìn)棧和出棧操作,判斷??蘸蜅M操作,返回棧頂元素操作。要求生成順序棧時(shí),從鍵盤上讀取數(shù)據(jù)元素。typedefstruct{DataTypestack[MaxStackSize]; inttop;}SeqStack;voidStackInitiate(SeqStack*S) {S->top=0; }intStackNotEmpty(SeqStackS){if(S.top<=0)return0;elsereturn1;}intStackPush(SeqStack*S,DataTypex){if(S->top>=MaxStackSize){printf("堆棧已滿無法插入!\n"); return0;}else{S->stack[S->top]=x; S->top++;return1;}}intStackPop(SeqStack*S,DataType*d){if(S->top<=0){printf("堆棧已空無數(shù)據(jù)元素出棧!\n"); return0;}else{S->top--;*d=S->stack[S->top];return1;}}intStackTop(SeqStackS,DataType*d){if(S.top<=0){printf("堆棧已空!\n"); return0;}else{*d=S.stack[S.top-1]; return1;}}(二)完成下列程序,該程序?qū)崿F(xiàn)棧的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),構(gòu)建鏈棧(棧中的元素依次為China,Japan,F(xiàn)rance,India,Australia),依次進(jìn)行進(jìn)棧和出棧操作,判斷??蘸蜅M操作,返回棧頂元素操作。要求生成鏈棧時(shí),從鍵盤上讀取數(shù)據(jù)元素。typedefstructsnode{DataTypedata;structsnode*next;}LSNode;voidStackInitiate(LSNode**head){*head=(LSNode*)malloc(sizeof(LSNode)); (*head)->next=NULL;}intStackNotEmpty(LSNode*head){if(head->next==NULL)return0;elsereturn1;}intStackPush(LSNode*head,DataTypex){LSNode*p;p=(LSNode*)malloc(sizeof(LSNode));p->data=x;p->next=head->next;head->next=p;return1;}intStackPop(LSNode*head,DataType*d){LSNode*p=head->next;if(p==NULL){printf("堆棧已空出錯(cuò)!"); return0;}head->next=p->next;*d=p->data; free(p);return1;}intStackTop(LSNode*head,DataType*d){LSNode*p=head->next; if(p==NULL) { printf("堆棧已空出錯(cuò)!"); return0; } *d=p->data; return1;}voidDestroy(LSNode*head){LSNode*p,*p1;p=head; while(p!=NULL) {p1=p; p=p->next; free(p1); }}(三)利用順序棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換,輸入十進(jìn)制整數(shù),分別將其轉(zhuǎn)換為八進(jìn)制數(shù)和二進(jìn)制數(shù)。(四)完成下列程序,該程序?qū)崿F(xiàn)循環(huán)隊(duì)列的存儲(chǔ)和基本操作,構(gòu)建循環(huán)隊(duì)列(隊(duì)列中的元素依次為John,Mary,Linda,Mike,Paul),依次進(jìn)行判斷隊(duì)列是否為空和滿操作、入隊(duì)和出隊(duì)操作、取得隊(duì)首元素操作。typedefstruct{DataTypequeue[MaxQueueSize];intrear;intfront;intcount;}SeqCQueue;voidQueueInitiate(SeqCQueue*Q){Q->rear=0; Q->front=0;Q->count=0;}intQueueNotEmpty(SeqCQueueQ){if(Q.count!=0) return1;elsereturn0;}intQueueAppend(SeqCQueue*Q,DataTypex){if(Q->count>0&&Q->rear==Q->front){printf("隊(duì)列已滿無法插入!\n"); return0;}else{Q->queue[Q->rear]=x; Q->rear=(Q->rear+1)%MaxQueueSize; Q->count++; return1;}}intQueueDelete(SeqCQueue*Q,DataType*d){if(Q->count==0){printf("隊(duì)列已空無數(shù)據(jù)元素出隊(duì)列!\n"); return0;}else{*d=Q->queue[Q->front]; Q->front=(Q->front+1)%MaxQueueSize; Q->count--; return1;}}intQueueGet(SeqCQueueQ,DataType*d){if(Q.count==0){printf("隊(duì)列已空無數(shù)據(jù)元素可取!\n"); return0;}else{*d=Q.queue[Q.front]; return1;}}實(shí)驗(yàn)三二叉樹的操作及應(yīng)用一、實(shí)驗(yàn)?zāi)康?、進(jìn)一步掌握指針變量、動(dòng)態(tài)變量的含義。2、掌握二叉樹的結(jié)構(gòu)特性,以及各種存儲(chǔ)結(jié)構(gòu)的特點(diǎn)和適用范圍。3、掌握用指針類型描述、訪問和處理二叉樹的運(yùn)算。二、實(shí)驗(yàn)內(nèi)容(一)完成下列程序,該程序以二叉鏈表作存儲(chǔ)結(jié)構(gòu),構(gòu)建如圖1所示的二叉樹,并依次進(jìn)行二叉樹的前序、中序、后序及層次遍歷。圖1typedefstructNode{DataTypedata; structNode*leftChild; structNode*rightChild;}BiTreeNode;/*初始化*/voidInitiate(BiTreeNode**root){*root=(BiTreeNode*)malloc(sizeof(BiTreeNode));(*root)->leftChild=NULL;(*root)->rightChild=NULL;}voidPreOrder(BiTreeNode*t,voidVisit(DataTypeitem))/*前序遍歷二叉樹t,訪問操作為Visit()函數(shù)*/{if(t!=NULL){Visit(t->data); PreOrder(t->leftChild,Visit); PreOrder(t->rightChild,Visit);}}voidInOrder(BiTreeNode*t,voidVisit(DataTypeitem))/*中序t*/{if(t!=NULL) {InOrder(t->leftChild,Visit); Visit(t->data); InOrder(t->rightChild,Visit); }}voidPostOrder(BiTreeNode*t,voidVisit(DataTypeitem))/*后序*/{if(t!=NULL) {PostOrder(t->leftChild,Visit); PostOrder(t->rightChild,Visit); Visit(t->data); }}(二)完成下列程序,該程序以二叉鏈表作存儲(chǔ)結(jié)構(gòu),構(gòu)建如圖2所示二叉樹,計(jì)算二叉樹深度、所有結(jié)點(diǎn)總數(shù)、葉子結(jié)點(diǎn)數(shù)、雙孩子結(jié)點(diǎn)個(gè)數(shù)、單孩子結(jié)點(diǎn)個(gè)數(shù)。圖2intBTreeDepth(BiTreeNode*BT){intleftdep,rightdep;if(BT==NULL) return(0);else{ leftdep=BTreeDepth(BT->leftChild); rightdep=BTreeDepth(BT->rightChild); if(leftdep>rightdep) return(leftdep+1); else return(rightdep+1);}}intnodecount(BiTreeNode*BT){if(BT==NULL) return(0);else return(nodecount(BT->leftChild)+nodecount(BT->rightChild)+1);}intleafcount(BiTreeNode*BT){if(BT==NULL) return(0);elseif(BT->leftChild==NULL&&BT->rightChild==NULL) return(1);else return(leafcount(BT->leftChild)+leafcount(BT->rightChild));}intnotleafcount(BiTreeNode*BT){if(BT==NULL) return(0);elseif(BT->leftChild==NULL&&BT->rightChild==NULL) return(0);else return(notleafcount(BT->leftChild)+notleafcount(BT->rightChild)+1);}intonesoncount(BiTreeNode*BT){if(BT==NULL) return(0);elseif((BT->leftChild==NULL&&BT->rightChild!=NULL)||(BT->leftChild!=NULL&&BT->rightChild==NULL)) return(onesoncount(BT->leftChild)+onesoncount(BT->rightChild)+1);else return(onesoncount(BT->leftChild)+onesoncount(BT->rightChild));}inttwosoncount(BiTreeNode*BT){if(BT==NULL) return(0);elseif(BT->leftChild==NULL||BT->rightChild==NULL) return(twosoncount(BT->leftChild)+twosoncount(BT->rightChild));elseif(BT->leftChild!=NULL&&BT->rightChild!=NULL) return(twosoncount(BT->leftChild)+twosoncount(BT->rightChild)+1);}(三)用非遞歸方式遍歷圖2所示的二叉樹(先序、中序或后序),輸出遍歷序列。實(shí)驗(yàn)四圖的操作及應(yīng)用一、實(shí)驗(yàn)?zāi)康?、理解圖的基本概念及術(shù)語。2、掌握?qǐng)D的兩種存儲(chǔ)結(jié)構(gòu)(鄰接矩陣和鄰接表)的表示方法。3、熟練掌握?qǐng)D的兩種遍歷(深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷)的算法思想、步驟,并能列出在兩種存儲(chǔ)結(jié)構(gòu)上按上述兩種遍歷算法得到的序列。4、理解最小生成樹的概念,能按Prim算法構(gòu)造最小生成樹。二、實(shí)現(xiàn)內(nèi)容(一)完成下列程序,該程序構(gòu)造如圖1所示的圖的鄰接矩陣存儲(chǔ)結(jié)構(gòu)。圖1/*鄰接矩陣*/typedefstruct{SeqListVertices; intedge[MaxVertices][MaxVertices]; intnumOfEdges; }AdjMGraph;voidInitiate(AdjMGraph*G,intn) {inti,j;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j)G->edge[i][j]=0; elseG->edge[i][j]=MaxWeight;}G->numOfEdges=0; /*邊的條數(shù)置為0*/ListInitiate(&G->Vertices); /*順序表初始化*/}voidInsertVertex(AdjMGraph*G,DataTypevertex){ListInsert(&G->Vertices,G->Vertices.size,vertex);}voidInsertEdge(AdjMGraph*G,intv1,intv2,intweight){if(v1<0||v1>G->Vertices.size||v2<0||v2>G->Vertices.size){printf("參數(shù)v1或v2越界出錯(cuò)!\n"); exit(1);}G->edge[v1][v2]=weight;G->numOfEdges++;}typedefstruct{introw; //行下標(biāo) intcol; //列下標(biāo) intweight; //權(quán)值}RowColWeight;voidCreatGraph(AdjMGraph*G,DataTypeV[],intn,RowColWeightE[],inte)/*在圖G中插入n個(gè)頂點(diǎn)信息V和e條邊信息E*/{inti,k; Initiate(G,n); /*頂點(diǎn)順序表初始化*/ for(i=0;i<n;i++) InsertVertex(G,V[i]); /*頂點(diǎn)插入*/ for(k=0;k<e;k++) InsertEdge(G,E[k].row,E[k].col,E[k].weight); }(二)完成下列程序,該程序構(gòu)造如圖1所示的圖的鄰接表存儲(chǔ)結(jié)構(gòu)。/*鄰接表的存儲(chǔ)結(jié)構(gòu)*/typedefstructNode{ intdest; /*鄰接邊的弧頭頂點(diǎn)序號(hào)*/ structNode*next;}Edge; /*鄰接邊單鏈表的結(jié)點(diǎn)結(jié)構(gòu)體*/typedefstruct{ DataTypedata; /*頂點(diǎn)數(shù)據(jù)元素*/ intsorce; /*鄰接邊的弧尾頂點(diǎn)序號(hào)*/ Edge*adj; /*鄰接邊的頭指針*/}AdjLHeight; /*數(shù)組的數(shù)據(jù)元素類型結(jié)構(gòu)體*/typedefstruct{AdjLHeighta[MaxVertices]; /*鄰接表數(shù)組*/intnumOfVerts; /*頂點(diǎn)個(gè)數(shù)*/intnumOfEdges; /*邊個(gè)數(shù)*/}AdjLGraph; /*鄰接表結(jié)構(gòu)體*/(三)完成下列程序,該程序分別創(chuàng)建一個(gè)如圖2所示的圖a和b,分別打印出這兩個(gè)圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷的結(jié)點(diǎn)信息序列。00165948372(a)603451278(b)圖2/*深度優(yōu)先遍歷*/voidDepthFSearch(AdjMWGraphG,intv,intvisited[],voidVisit(DataTypeitem)){intw;Visit(G.Vertices.list[v]); visited[v]=1; w=GetFirstVex(G,v); while(w!=-1) {if(!visited[w])DepthFSearch(G,w,visited,Visit); w=GetNextVex(G,v,w); }}/*廣度優(yōu)先遍歷*/voidBroadFSearch(AdjMWGraphG,intv,intvisited[],voidVisit(DataTypeitem)){DataTypeu,w; SeqCQueuequeue;Visit(G.Vertices.list[v]); visited[v]=1; QueueInitiate(&queue); QueueAppend(&queue,v); while(QueueNotEmpty(queue)) {QueueDelete(&queue,&u); w=GetFirstVex(G,u); while(w!=-1) {if(!visited[w]) {Visit(G.Vertices.list[w]);visited[w]=1; QueueAppend(&queue,w); } w=GetNextVex(G,u,w); } }}(四)完成下列程序,該程序用Prim算法求圖1所示的圖的最小生成樹。typederstruct{VerTvertex; intweight;}MinSpanTree;voidPrim(AdjMWGraphG,MinSpanTreecloseVertex[]){VerTx;intn=G.Vertices.size,minCost; int*lowCost=(int*)malloc(sizeof(int)*n); inti,j,k; for(i=1;i<n;i++) lowCost[i]=G.edge[0][i]; /*從頂點(diǎn)0出發(fā)構(gòu)造最小生成樹*/ ListGet(G.Vertices,0,&x); closeVertex[0].vertex=x; lowCost[0]=-1; for(i=1;i<n;i++){/*尋找當(dāng)前最小權(quán)值的邊所對(duì)應(yīng)的弧頭頂點(diǎn)k*/minCost=MaxWeight; for(j=1;j<n;j++) {if(lowCost[j]<minCost&&lowCost[j]>0) {minCost=lowCost[j]; k=j; } } ListGet(G.Vertices,k,&x); closeVertex[i].vertex=x; closeVertex[i].weight=minCost; lowCost[k]=-1; for(j=1;j<n;j++) {if(G.edge[k][j]<lowCost[j]) lowCost[j]=G.edge[k][j]; } }}實(shí)驗(yàn)五查找與排序一、實(shí)驗(yàn)?zāi)康?、掌握查找的不同方法,并能用高級(jí)語言實(shí)現(xiàn)查找算法。2、熟練掌握順序表的查找方法和有序順序表的折半查找算法。3、掌握常用的排序方法,并能用高級(jí)語言實(shí)現(xiàn)排序算法。4、深刻理解排序的定義和各種排序方法的特點(diǎn),并能加以靈活運(yùn)用。5、了解各種方法的排序過程及依據(jù)的原則,并掌握各種排序方法的時(shí)間復(fù)雜度的分析方法。二、實(shí)驗(yàn)內(nèi)容(一)完成下列程序,該程序?qū)崿F(xiàn)順序表(表中元素依次為(31,38,54,56,75,80,55,63))的順序查找,要求查找的元素依次為80,42,在輸出結(jié)果中顯示查找成功與查找不成功信息。typedefstruct{KeyTypekey;}DataType;/*順序查找*/intSeqSearch(DataTypea[],intn,KeyTypekey){inti=0; while(i<n&&a[i].key!=key)i++; if(a[i].key==key)returni; elsereturn-1;}(二)完成下列程序,該程序有序順序表(表中元素依次為(31,38,54,56,75,80,97))的二分查找。要求查找的元素依次為80,42,在輸出結(jié)果中顯示查找成功與查找不成功信息。/*二分查找*/intBiSearch(DataTypea[],intn,KeyTypekey){intlow=0,high=n-1; //確定初始查找區(qū)間上下界 intmid;while(low<=high) { mid=(low+high)/2;//確定查找區(qū)間中心下標(biāo) if(a[mid].key==key)returnmid; //查找成功 elseif(a[mid].key<key)low=mid+1; elsehigh=mid-1; } return-1; //查找失敗}(三)完成下列程序,該程序分別用各種排序方法對(duì)表(表中元素依次為(11,4,18,29,33,9,21,5,19))進(jìn)行排序。voidInsertSort(DataTypea[],intn)//用直接插入法對(duì)a[0]--a[n-1]排序{inti,j; DataTypetemp; for(i=0;i<n-1;i++) {temp=a[i+1]; j=i; while(j>-1&&temp.key<=a[j].key) {a[j+1]=a[j]; j--; } a[j+1]=temp; }}voidShellSort(DataTypea[],intn,intd[],intnumOfD)//用希爾排序法對(duì)元素a[0]--a[n-1]排序,d[0]--d[numOfD-1]為希爾增量值{inti,j,k,m,span; DataTypetemp; for(m=0;m<numOfD;m++) //共numOfD次循環(huán) {span=d[m]; //取本次的增量值 for(k=0;k<span;k++) //共span個(gè)小組 { //組內(nèi)是直接插入排序,區(qū)別是每次不是增1而是增span for(i=k;i<n-span;i=i+span) {temp=a[i+span]; j=i; while(j>-1&&temp.key<=a[j].key) {a[j+span]=a[j]; j=j-span; } a[j+span]=temp; } } }}voidSelectSort(DataTypea[],intn)//直接選擇排序{inti,j,small; DataTypetemp; for(i=0;i<n-1;i++) {small=i; //設(shè)第i個(gè)數(shù)據(jù)元素關(guān)鍵字最小 for(j=i+1;j<n;j++) //尋找關(guān)鍵字最小的數(shù)據(jù)元素 if(a[j].key<a[small].key)small=j;//記住最小元素的下標(biāo)if(small!=i)//當(dāng)最小元素的下標(biāo)不為i時(shí)交換位置 { temp=a[i]; a[i]=a[small]; a[small]=temp; } }}/*堆排序*/voidCreatHeap(DataTypea[],intn,inth){inti,j,flag; DataTypetemp; i=h; //i為要建堆

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論