版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《數(shù)據(jù)結(jié)構(gòu)》期末考試題型及分值〔1〕簡答題6題*5分=30分簡要回答要點 〔2〕分析題6題*5分=30分給出結(jié)果〔3〕設(shè)計題1題*10分=10分設(shè)計思想及結(jié)果〔4〕編程題1題*10分=10分完整代碼〔5〕綜合題1題*20分=20分抽象數(shù)據(jù)類型的定義、表示、實現(xiàn)、算法分析{定義=功能〔ADT〕表示=存儲結(jié)構(gòu)體實現(xiàn)=算法〔基本操作〕算法分析=時間、空間復(fù)雜度}考試概念有:1.數(shù)據(jù)結(jié)構(gòu){一、線性表〔棧-隊-列-串-數(shù)組-廣義表-邏輯結(jié)構(gòu)-存儲結(jié)構(gòu)-運算結(jié)構(gòu)〕二、非線性表〔集合-樹-圖〕}2.抽象數(shù)據(jù)類型數(shù)據(jù)對象-數(shù)據(jù)關(guān)系-基本操作3.算法性質(zhì)-要求〔設(shè)計〕-效率〔度量〕4.實例查找:高效查找算法排序:高效的排序算法分析題考試題目參考〔1〕1-2-3-4-5-6順序建BBST〔2〕6-5-4-3-2-1順序建BBST簡答題實例設(shè)計題:〔1〕〔2〕數(shù)據(jù)結(jié)構(gòu)試卷〔一〕三、計算題〔每題6分,共24分〕在如下數(shù)組A中鏈接存儲了一個線性表,表頭指針為A[0].ne*t,試寫出該線性表。A01234567data605078903440ne*t3572041線性表為:〔78,50,40,60,34,90〕請畫出以下圖的鄰接矩陣和鄰接表。已知一個圖的頂點集V和邊集E分別為:V={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};用克魯斯卡爾算法得到最小生成樹,試寫出在最小生成樹中依次得到的各條邊。用克魯斯卡爾算法得到的最小生成樹為:(1,2)3,(4,6)4,(1,3)5,(1,4)8,(2,5)10,(4,7)204.畫出向小根堆中加入數(shù)據(jù)4,2,5,8,3時,每加入一個數(shù)據(jù)后堆的變化。見圖1244444222552852834528434444422255285283452843圖12圖11四、閱讀算法〔每題7分,共14分〕LinkListmynote(LinkListL){//L是不帶頭結(jié)點的單鏈表的頭指針if(L&&L->ne*t){q=L;L=L->ne*t;p=L;S1:while(p->ne*t)p=p->ne*t;S2:p->ne*t=q;q->ne*t=NULL;}returnL;}請回答以下問題:〔1〕說明語句S1的功能;查詢鏈表的尾結(jié)點〔2〕說明語句組S2的功能;將第一個結(jié)點鏈接到鏈表的尾部,作為新的尾結(jié)點〔3〕設(shè)鏈表表示的線性表為〔a1,a2,…,an〕,寫出算法執(zhí)行后的返回值所表示的線性表。返回的線性表為〔a2,a3,…,an,a1〕voidABC(BTNode*BT){ifBT{ABC(BT->left);ABC(BT->right);cout<<BT->data<<'';}}該算法的功能是:遞歸地后序遍歷鏈?zhǔn)酱鎯Φ亩鏄湮?、算法填空〔?分〕二叉搜索樹的查找——遞歸算法:boolFind(BTreeNode*BST,ElemType&item){if(BST==NULL)returnfalse;//查找失敗else{if(item==BST->data){item=BST->data;//查找成功return__true__;}elseif(item<BST->data)returnFind(___BST->left__,item);elsereturnFind(____BST->right__,item);}//if}六、編寫算法〔共8分〕統(tǒng)計出單鏈表HL中結(jié)點的值等于給定值*的結(jié)點數(shù)。intCount*(LNode*HL,ElemType*)intCount*(LNode*HL,ElemType*){inti=0;LNode*p=HL;//i為計數(shù)器while(p!=NULL){if(P->data==*)i++;p=p->ne*t;}//while,出循環(huán)時i中的值即為*結(jié)點個數(shù)returni;}//Count*數(shù)據(jù)結(jié)構(gòu)試卷〔二〕三、應(yīng)用題(36分)設(shè)一組初始記錄關(guān)鍵字序列為(45,80,48,40,22,78),那么分別給出第4趟簡單項選擇擇排序和第4趟直接插入排序后的結(jié)果。(22,40,45,48,80,78),(40,45,48,80,22,78)設(shè)指針變量p指向雙向鏈表中結(jié)點A,指針變量q指向被插入結(jié)點B,要求給出在結(jié)點A的后面插入結(jié)點B的操作序列〔設(shè)雙向鏈表中結(jié)點的兩個指針域分別為llink和rlink〕。q->llink=p;q->rlink=p->rlink;p->rlink->llink=q;p->rlink=q;設(shè)一組有序的記錄關(guān)鍵字序列為(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求計算出查找關(guān)鍵字62時的比較次數(shù)并計算出查找成功時的平均查找長度。2,ASL=91*1+2*2+3*4+4*2)=25/9設(shè)一棵樹T中邊的集合為{(A,B),(A,C),(A,D),(B,E),(C,F(xiàn)),(C,G)},要求用孩子兄弟表示法〔二叉鏈表〕表示出該樹的存儲結(jié)構(gòu)并將該樹轉(zhuǎn)化成對應(yīng)的二叉樹。樹的鏈?zhǔn)酱鎯Y(jié)構(gòu)略,二叉樹略設(shè)有無向圖G,要求給出用普里姆算法構(gòu)造最小生成樹所走過的邊的集合。E={(1,3),(1,2),(3,5),(5,6),(6,4)}設(shè)有一組初始記錄關(guān)鍵字為(45,80,48,40,22,78),要求構(gòu)造一棵二叉排序樹并給出構(gòu)造過程。四、算法設(shè)計題(16分)設(shè)有一組初始記錄關(guān)鍵字序列〔K1,K2,…,Kn〕,要求設(shè)計一個算法能夠在O(n)的時間復(fù)雜度內(nèi)將線性表劃分成兩部分,其中左半部分的每個關(guān)鍵字均小于Ki,右半部分的每個關(guān)鍵字均大于等于Ki。設(shè)有一組初始記錄關(guān)鍵字序列〔K1,K2,…,Kn〕,要求設(shè)計一個算法能夠在O(n)的時間復(fù)雜度內(nèi)將線性表劃分成兩部分,其中左半部分的每個關(guān)鍵字均小于Ki,右半部分的每個關(guān)鍵字均大于等于Ki。voidquickpass(intr[],ints,intt){inti=s,j=t,*=r[s];while(i<j){while(i<j&&r[j]>*)j=j-1;if(i<j){r[i]=r[j];i=i+1;}while(i<j&&r[i]<*)i=i+1;if(i<j){r[j]=r[i];j=j-1;}}r[i]=*;}設(shè)有兩個集合A和集合B,要求設(shè)計生成集合C=A∩B的算法,其中集合A、B和C用鏈?zhǔn)酱鎯Y(jié)構(gòu)表示。設(shè)有兩個集合A和集合B,要求設(shè)計生成集合C=A∩B的算法,其中集合A、B和C用鏈?zhǔn)酱鎯Y(jié)構(gòu)表示。typedefstructnode{intdata;structnode*ne*t;}lklist;voidintersection(lklist*ha,lklist*hb,lklist*&hc){lklist*p,*q,*t;for(p=ha,hc=0;p!=0;p=p->ne*t){for(q=hb;q!=0;q=q->ne*t)if(q->data==p->data)break;if(q!=0){t=(lklist*)malloc(sizeof(lklist));t->data=p->data;t->ne*t=hc;hc=t;}}}數(shù)據(jù)結(jié)構(gòu)試卷〔三〕三、計算題(每題10分,共30分)1.已知二叉樹的前序遍歷序列是AEFBGCDHIKJ,中序遍歷序列是EFAGBCHKIJD,畫出此二叉樹,并畫出它的后序線索二叉樹。2.已知待散列的線性表為〔36,15,40,63,22〕,散列用的一維地址空間為[0..6],假定選用的散列函數(shù)是H〔K〕=Kmod7,假設(shè)發(fā)生沖突采用線性探查法處理,試:H(36)=36mod7=1;H1(22)=(1+1)mod7=2;….沖突H(15)=15mod7=1;….沖突H2(22)=(2+1)mod7=3;H1(15)=(1+1)mod7=2;H(40)=40mod7=5;H(63)=63mod7=0;H(22)=22mod7=1;….沖突〔1〕計算出每一個元素的散列地址并在以下圖中填寫出散列表:`01234566336152240〔2〕求出在查找每一個元素概率相等情況下的平均查找長度。ASL=3.已知序列〔10,18,4,3,6,12,1,9,18,8〕請用快速排序?qū)懗雒恳惶伺判虻慕Y(jié)果。(8,9,4,3,6,1),10,(12,18,18)(1,6,4,3),8,(9),10,12,(18,18)1,(3,4,6),8,9,10,12,18,(18)1,3,(4,6),8,9,10,12,18,181,3,4,6,8,9,10,12,18,18四、算法設(shè)計題(每題15分,共30分)設(shè)計在單鏈表中刪除值相同的多余結(jié)點的算法。設(shè)計在單鏈表中刪除值相同的多余結(jié)點的算法。typedefintdatatype;typedefstructnode{datatypedata;structnode*ne*t;}lklist;voiddelredundant(lklist*&head){lklist*p,*q,*s;for(p=head;p!=0;p=p->ne*t){for(q=p->ne*t,s=q;q!=0;)if(q->data==p->data){s->ne*t=q->ne*t;free(q);q=s->ne*t;}else{s=q,q=q->ne*t;}}}設(shè)計一個求結(jié)點*在二叉樹中的雙親結(jié)點算法。設(shè)計一個求結(jié)點*在二叉樹中的雙親結(jié)點算法。typedefstructnode{datatypedata;structnode*lchild,*rchild;}bitree;bitree*q[20];intr=0,f=0,flag=0;voidpreorder(bitree*bt,char*){if(bt!=0&&flag==0)if(bt->data==*){flag=1;return;}else{r=(r+1)%20;q[r]=bt;preorder(bt->lchild,*);preorder(bt->rchild,*);}}voidparent(bitree*bt,char*){inti;preorder(bt,*);for(i=f+1;i<=r;i++)if(q[i]->lchild->data==*||q[i]->rchild->data)break;if(flag==0)printf("notfound*\n");elseif(i<=r)printf("%c",bt->data);elseprintf("notparent");}數(shù)據(jù)結(jié)構(gòu)試卷〔四〕三、計算題(每題10分,共30分)1、畫出廣義表LS=((),(e),(a,(b,c,d)))的頭尾鏈表存儲結(jié)構(gòu)。2、以下圖所示的森林:(1)求樹〔a〕的先根序列和后根序列;(1)ABCDEF;BDEFCA;(2)ABCDEFGHIJK;BDEFCAIJKHG林轉(zhuǎn)換為相應(yīng)的二叉樹;(2)求森林先序序列和中序序列;ABCDEF;BDEFCA;〔3〕將此森林轉(zhuǎn)換為相應(yīng)的二叉樹;(2)ABCDEFGHIJK;BDEFCAIJKHG林轉(zhuǎn)換為相應(yīng)的二叉樹;3、設(shè)散列表的地址范圍是[0..9],散列函數(shù)為H〔key〕=〔key2+2〕MOD9,并采用鏈表處理沖突,請畫出元素7、4、5、3、6、2、8、9依次插入散列表的存儲結(jié)構(gòu)。H(4)=H(5)=0,H(3)=H(6)=H(9)=2,H(8)=3,H(2)=H(7)=6四、算法設(shè)計題(每題10分,共30分)設(shè)單鏈表中有僅三類字符的數(shù)據(jù)元素(大寫字母、數(shù)字和其它字符),要求利用原單鏈表中結(jié)點空間設(shè)計出三個單鏈表的算法,使每個單鏈表只包含同類字符。設(shè)單鏈表中有僅三類字符的數(shù)據(jù)元素(大寫字母、數(shù)字和其它字符),要求利用原單鏈表中結(jié)點空間設(shè)計出三個單鏈表的算法,使每個單鏈表只包含同類字符。typedefchardatatype;typedefstructnode{datatypedata;structnode*ne*t;}lklist;voidsplit(lklist*head,lklist*&ha,lklist*&hb,lklist*&hc){lklist*p;ha=0,hb=0,hc=0;for(p=head;p!=0;p=head){head=p->ne*t;p->ne*t=0;if(p->data>='A'&&p->data<='Z'){p->ne*t=ha;ha=p;}elseif(p->data>='0'&&p->data<='9'){p->ne*t=hb;hb=p;}else{p->ne*t=hc;hc=p;}}}設(shè)計在鏈?zhǔn)酱鎯Y(jié)構(gòu)上交換二叉樹中所有結(jié)點左右子樹的算法。設(shè)計在鏈?zhǔn)酱鎯Y(jié)構(gòu)上交換二叉樹中所有結(jié)點左右子樹的算法。typedefstructnode{intdata;structnode*lchild,*rchild;}bitree;voidswapbitree(bitree*bt){bitree*p;if(bt==0)return;swapbitree(bt->lchild);swapbitree(bt->rchild);p=bt->lchild;bt->lchild=bt->rchild;bt->rchild=p;}在鏈?zhǔn)酱鎯Y(jié)構(gòu)上建立一棵二叉排序樹。在鏈?zhǔn)酱鎯Y(jié)構(gòu)上建立一棵二叉排序樹。#definen10typedefstructnode{intkey;structnode*lchild,*rchild;}bitree;voidbstinsert(bitree*&bt,intkey){if(bt==0){bt=(bitree*)malloc(sizeof(bitree));bt->key=key;bt->lchild=bt->rchild=0;}elseif(bt->key>key)bstinsert(bt->lchild,key);elsebstinsert(bt->rchild,key);}voidcreatebsttree(bitree*&bt){inti;for(i=1;i<=n;i++)bstinsert(bt,random(100));}數(shù)據(jù)結(jié)構(gòu)試卷〔五〕三、應(yīng)用題(32分)設(shè)某棵二叉樹的中序遍歷序列為DBEAC,前序遍歷序列為ABDEC,要求給出該二叉樹的的后序遍歷序列。DEBCA設(shè)無向圖G〔如右圖所示〕,給出該圖的最小生成樹上邊的集合并計算最小生成樹各邊上的權(quán)值之和。E={(1,5),(5,2),(5,3),(3,4)},W=10設(shè)一組初始記錄關(guān)鍵字序列為(15,17,18,22,35,51,60),要求計算出成功查找時的平均查找長度。ASL=(1*1+2*2+3*4)/7=17/7設(shè)散列表的長度為8,散列函數(shù)H(k)=kmod7,初始記錄關(guān)鍵字序列為(25,31,8,27,13,68),要求分別計算出用線性探測法和鏈地址法作為解決沖突方法的平均查找長度。ASL1=7/6,ASL2=4/3四、算法設(shè)計題(28分)設(shè)計判斷兩個二叉樹是否相同的算法。設(shè)計判斷兩個二叉樹是否相同的算法。typedefstructnode{datatypedata;structnode*lchild,*rchild;}bitree;intjudgebitree(bitree*bt1,bitree*bt2){if(bt1==0&&bt2==0)return(1);elseif(bt1==0||bt2==0||bt1->data!=bt2->data)return(0);elsereturn(judgebitree(bt1->lchild,bt2->lchild)*judgebitree(bt1->rchild,bt2->rchild));}設(shè)計兩個有序單鏈表的合并排序算法。設(shè)計兩個有序單鏈表的合并排序算法。voidmergelklist(lklist*ha,lklist*hb,lklist*&hc){lklist*s=hc=0;while(ha!=0&&hb!=0)if(ha->data<hb->data){if(s==0)hc=s=ha;else{s->ne*t=ha;s=ha;};ha=ha->ne*t;}else{if(s==0)hc=s=hb;else{s->ne*t=hb;s=hb;};hb=hb->ne*t;}if(ha==0)s->ne*t=hb;elses->ne*t=ha;}數(shù)據(jù)結(jié)構(gòu)試卷〔六〕四、算法設(shè)計題(20分)設(shè)計在順序有序表中實現(xiàn)二分查找的算法。設(shè)計在順序有序表中實現(xiàn)二分查找的算法。structrecord{intkey;intothers;};intbisearch(structrecordr[],intk){intlow=0,mid,high=n-1;while(low<=high){mid=(low+high)/2;if(r[mid].key==k)return(mid+1);elseif(r[mid].key>k)high=mid-1;elselow=mid+1;}return(0);}設(shè)計判斷二叉樹是否為二叉排序樹的算法。設(shè)計判斷二叉樹是否為二叉排序樹的算法。intminnum=-32768,flag=1;typedefstructnode{intkey;structnode*lchild,*rchild;}bitree;voidinorder(bitree*bt){if(bt!=0){inorder(bt->lchild);if(minnum>bt->key)flag=0;minnum=bt->key;inorder(bt->rchild);}}3.在鏈?zhǔn)酱鎯Y(jié)構(gòu)上設(shè)計直接插入排序算法在鏈?zhǔn)酱鎯Y(jié)構(gòu)上設(shè)計直接插入排序算法voidstraightinsertsort(lklist*&head){lklist*s,*p,*q;intt;if(head==0||head->ne*t==0)return;elsefor(q=head,p=head->ne*t;p!=0;p=q->ne*t){for(s=head;s!=q->ne*t;s=s->ne*t)if(s->data>p->data)break;if(s==q->ne*t)q=p;else{q->ne*t=p->ne*t;p->ne*t=s->ne*t;s->ne*t=p;t=p->data;p->data=s->data;s->data=t;}}}數(shù)據(jù)結(jié)構(gòu)試卷〔七〕四、算法設(shè)計題(20分)設(shè)計在鏈?zhǔn)浇Y(jié)構(gòu)上實現(xiàn)簡單項選擇擇排序算法。設(shè)計在鏈?zhǔn)浇Y(jié)構(gòu)上實現(xiàn)簡單項選擇擇排序算法。voidsimpleselectsorlklist(lklist*&head){lklist*p,*q,*s;intmin,t;if(head==0||head->ne*t==0)return;for(q=head;q!=0;q=q->ne*t){min=q->data;s=q;for(p=q->ne*t;p!=0;p=p->ne*t)if(min>p->data){min=p->data;s=p;}if(s!=q){t=s->data;s->data=q->data;q->data=t;}}}設(shè)計在順序存儲結(jié)構(gòu)上實現(xiàn)求子串算法。設(shè)計在順序存儲結(jié)構(gòu)上實現(xiàn)求子串算法。voidsubstring(chars[],longstart,longcount,chart[]){longi,j,length=strlen(s);if(start<1||start>length)printf("Thecopypositioniswrong");elseif(start+count-1>length)printf("Toocharacterstobecopied");else{for(i=start-1,j=0;i<start+count-1;i++,j++)t[j]=s[i];t[j]='\0';}}設(shè)計求結(jié)點在二叉排序樹中層次的算法。設(shè)計求結(jié)點在二叉排序樹中層次的算法。intlev=0;typedefstructnode{intkey;structnode*lchild,*rchild;}bitree;voidlevel(bitree*bt,int*){if(bt!=0){lev++;if(bt->key==*)return;elseif(bt->key>*)level(bt->lchild,*);elselevel(bt->rchild,*);}}數(shù)據(jù)結(jié)構(gòu)試卷〔八〕四、算法設(shè)計題(20分)設(shè)計一個在鏈?zhǔn)酱鎯Y(jié)構(gòu)上統(tǒng)計二叉樹中結(jié)點個數(shù)的算法。設(shè)計一個在鏈?zhǔn)酱鎯Y(jié)構(gòu)上統(tǒng)計二叉樹中結(jié)點個數(shù)的算法。voidcountnode(bitree*bt,int&count){if(bt!=0){count++;countnode(bt->lchild,count);countnode(bt->rchild,count);}}設(shè)計一個算法將無向圖的鄰接矩陣轉(zhuǎn)為對應(yīng)鄰接表的算法。設(shè)計一個算法將無向圖的鄰接矩陣轉(zhuǎn)為對應(yīng)鄰接表的算法。typedefstruct{intverte*[m];intedge[m][m];}gadjmatri*;typedefstructnode1{intinfo;intadjverte*;structnode1*ne*tarc;}glinklistnode;typedefstructnode2{intverte*info;glinklistnode*firstarc;}glinkheadnode;voidadjmatri*toadjlist(gadjmatri*g1[],glinkheadnodeg2[]){inti,j;glinklistnode*p;for(i=0;i<=n-1;i++)g2[i].firstarc=0;for(i=0;i<=n-1;i++)for(j=0;j<=n-1;j++)if(g1.edge[i][j]==1){p=(glinklistnode*)malloc(sizeof(glinklistnode));p->adjverte*=j;p->ne*tarc=g[i].firstarc;g[i].firstarc=p;p=(glinklistnode*)malloc(sizeof(glinklistnode));p->adjverte*=i;p->ne*tarc=g[j].firstarc;g[j].firstarc=p;}}數(shù)據(jù)結(jié)構(gòu)試卷〔九〕五、算法設(shè)計題(20分)設(shè)計計算二叉樹中所有結(jié)點值之和的算法。設(shè)計計算二叉樹中所有結(jié)點值之和的算法。voidsum(bitree*bt,int&s){if(bt!=0){s=s+bt->data;sum(bt->lchild,s);sum(bt->rchild,s);} }設(shè)計將所有奇數(shù)移到所有偶數(shù)之前的算法。設(shè)計將所有奇數(shù)移到所有偶數(shù)之前的算法。voidquickpass(intr[],ints,intt){inti=s,j=t,*=r[s];while(i<j){while(i<j&&r[j]%2==0)j=j-1;if(i<j){r[i]=r[j];i=i+1;}while(i<j&&r[i]%2==1)i=i+1;if(i<j){r[j]=r[i];j=j-1;}}r[i]=*;}設(shè)計判斷單鏈表中元素是否是遞增的算法。設(shè)計判斷單鏈表中元素是否是遞增的算法。intisriselk(lklist*head){if(head==0||head->ne*t==0)return(1);elsefor(q=head,p=head->ne*t;p!=0;q=p,p=p->ne*t)if(q->data>p->data)return(0);return(1);}數(shù)據(jù)結(jié)構(gòu)試卷〔十〕三、算法設(shè)計題(22分)設(shè)計在鏈?zhǔn)酱鎯Y(jié)構(gòu)上合并排序的算法。設(shè)計在鏈?zhǔn)酱鎯Y(jié)構(gòu)上合并排序的算法。voidmergelklist(lklist*ha,lklist*hb,lklist*&hc){lklist*s=hc=0;while(ha!=0&&hb!=0)if(ha->data<hb->data){if(s==0)hc=s=ha;else{s->ne*t=ha;s=ha;};ha=ha->ne*t;}else{if(s==0)hc=s=hb;else{s->ne*t=hb;s=hb;};hb=hb->ne*t;}if(ha==0)s->ne*t=hb;elses->ne*t=ha;}設(shè)計在二叉排序樹上查找結(jié)點*的算法。設(shè)計在二叉排序樹上查找結(jié)點*的算法。bitree*bstsearch1(bitree*t,intkey){bitree*p=t;while(p!=0)if(p->key==key)return(p);elseif(p->key>key)p=p->lchild;elsep=p->rchild;return(0);}設(shè)關(guān)鍵字序列(k1,k2,…,kn-1)是堆,設(shè)計算法將關(guān)鍵字序列(k1,k2,…,kn-1,*)調(diào)整為堆。設(shè)關(guān)鍵字序列(k1,k2,…,kn-1)是堆,設(shè)計算法將關(guān)鍵字序列(k1,k2,…,kn-1,*)調(diào)整為堆。voidadjustheap(intr[],intn){intj=n,i=j/2,temp=r[j-1];while(i>=1)if(temp>=r[i-1])break;else{r[j-1]=r[i-1];j=i;i=i/2;}r[j-1]=temp;}數(shù)據(jù)結(jié)構(gòu)試卷〔一〕參考答案三、計算題〔每題6分,共24分〕線性表為:〔78,50,40,60,34,90〕鄰接矩陣:鄰接表如圖11所示:圖11用克魯斯卡爾算法得到的最小生成樹為:(1,2)3,(4,6)4,(1,3)5,(1,4)8,(2,5)10,(4,7)20見圖1244444222552852834528434444422255285283452843圖12讀算法〔每題7分,共14分〕〔1〕查詢鏈表的尾結(jié)點〔2〕將第一個結(jié)點鏈接到鏈表的尾部,作為新的尾結(jié)點〔3〕返回的線性表為〔a2,a3,…,an,a1〕遞歸地后序遍歷鏈?zhǔn)酱鎯Φ亩鏄?。法填空〔每?分,共8分〕trueBST->leftBST->right編寫算法〔8分〕intCount*(LNode*HL,ElemType*){inti=0;LNode*p=HL;//i為計數(shù)器while(p!=NULL){if(P->data==*)i++;p=p->ne*t;}//while,出循環(huán)時i中的值即為*結(jié)點個數(shù)returni;}//Count*數(shù)據(jù)結(jié)構(gòu)試卷〔二〕參考答案四、算法設(shè)計題設(shè)有一組初始記錄關(guān)鍵字序列〔K1,K2,…,Kn〕,要求設(shè)計一個算法能夠在O(n)的時間復(fù)雜度內(nèi)將線性表劃分成兩部分,其中左半部分的每個關(guān)鍵字均小于Ki,右半部分的每個關(guān)鍵字均大于等于Ki。voidquickpass(intr[],ints,intt){inti=s,j=t,*=r[s];while(i<j){while(i<j&&r[j]>*)j=j-1;if(i<j){r[i]=r[j];i=i+1;}while(i<j&&r[i]<*)i=i+1;if(i<j){r[j]=r[i];j=j-1;}}r[i]=*;}設(shè)有兩個集合A和集合B,要求設(shè)計生成集合C=A∩B的算法,其中集合A、B和C用鏈?zhǔn)酱鎯Y(jié)構(gòu)表示。typedefstructnode{intdata;structnode*ne*t;}lklist;voidintersection(lklist*ha,lklist*hb,lklist*&hc){lklist*p,*q,*t;for(p=ha,hc=0;p!=0;p=p->ne*t){for(q=hb;q!=0;q=q->ne*t)if(q->data==p->data)break;if(q!=0){t=(lklist*)malloc(sizeof(lklist));t->data=p->data;t->ne*t=hc;hc=t;}}}數(shù)據(jù)結(jié)構(gòu)試卷〔三〕參考答案三、計算題1.2、H(36)=36mod7=1;H1(22)=(1+1)mod7=2;….沖突H(15)=15mod7=1;….沖突H2(22)=(2+1)mod7=3;H1(15)=(1+1)mod7=2;H(40)=40mod7=5;H(63)=63mod7=0;H(22)=22mod7=1;….沖突〔1〕01234566336152240〔2〕ASL=3、(8,9,4,3,6,1),10,(12,18,18)(1,6,4,3),8,(9),10,12,(18,18)1,(3,4,6),8,9,10,12,18,(18)1,3,(4,6),8,9,10,12,18,181,3,4,6,8,9,10,12,18,18四、算法設(shè)計題設(shè)計在單鏈表中刪除值相同的多余結(jié)點的算法。typedefintdatatype;typedefstructnode{datatypedata;structnode*ne*t;}lklist;voiddelredundant(lklist*&head){lklist*p,*q,*s;for(p=head;p!=0;p=p->ne*t){for(q=p->ne*t,s=q;q!=0;)if(q->data==p->data){s->ne*t=q->ne*t;free(q);q=s->ne*t;}else{s=q,q=q->ne*t;}}}設(shè)計一個求結(jié)點*在二叉樹中的雙親結(jié)點算法。typedefstructnode{datatypedata;structnode*lchild,*rchild;}bitree;bitree*q[20];intr=0,f=0,flag=0;voidpreorder(bitree*bt,char*){if(bt!=0&&flag==0)if(bt->data==*){flag=1;return;}else{r=(r+1)%20;q[r]=bt;preorder(bt->lchild,*);preorder(bt->rchild,*);}}voidparent(bitree*bt,char*){inti;preorder(bt,*);for(i=f+1;i<=r;i++)if(q[i]->lchild->data==*||q[i]->rchild->data)break;if(flag==0)printf("notfound*\n");elseif(i<=r)printf("%c",bt->data);elseprintf("notparent");}數(shù)據(jù)結(jié)構(gòu)試卷〔四〕參考答案三、計算題1.2.(1)ABCDEF;BDEFCA;(2)ABCDEFGHIJK;BDEFCAIJKHG林轉(zhuǎn)換為相應(yīng)的二叉樹;3.H(4)=H(5)=0,H(3)=H(6)=H(9)=2,H(8)=3,H(2)=H(7)=6四、算法設(shè)計題設(shè)單鏈表中有僅三類字符的數(shù)據(jù)元素(大寫字母、數(shù)字和其它字符),要求利用原單鏈表中結(jié)點空間設(shè)計出三個單鏈表的算法,使每個單鏈表只包含同類字符。typedefchardatatype;typedefstructnode{datatypedata;structnode*ne*t;}lklist;voidsplit(lklist*head,lklist*&ha,lklist*&hb,lklist*&hc){lklist*p;ha=0,hb=0,hc=0;for(p=head;p!=0;p=head){head=p->ne*t;p->ne*t=0;if(p->data>='A'&&p->data<='Z'){p->ne*t=ha;ha=p;}elseif(p->data>='0'&&p->data<='9'){p->ne*t=hb;hb=p;}else{p->ne*t=hc;hc=p;}}}設(shè)計在鏈?zhǔn)酱鎯Y(jié)構(gòu)上交換二叉樹中所有結(jié)點左右子樹的算法。typedefstructnode{intdata;structnode*lchild,*rchild;}bitree;voidswapbitree(bitree*bt){bitree*p;if(bt==0)return;swapbitree(bt->lchild);swapbitree(bt->rchild);p=bt->lchild;bt->lchild=bt->rchild;bt->rchild=p;}在鏈?zhǔn)酱鎯Y(jié)構(gòu)上建立一棵二叉排序樹。#definen10typedefstructnode{intkey;structnode*lchild,*rchild;}bitree;voidbstinsert(bitree*&bt,intkey){if(bt==0){bt=(bitree*)malloc(sizeof(bitree));bt->key=key;bt->lchild=bt->rchild=0;}elseif(bt->key>key)bstinsert(bt->lchild,key);elsebstinsert(bt->rchild,key);}voidcreatebsttree(bitree*&bt){inti;for(i=1;i<=n;i++)bstinsert(bt,random(100));}數(shù)據(jù)結(jié)構(gòu)試卷〔五〕參考答案四、算法設(shè)計題設(shè)計判斷兩個二叉樹是否相同的算法。typedefstructnode{datatypedata;structnode*lchild,*rchild;}bitree;intjudgebitree(bitree*bt1,bitree*bt2){if(bt1==0&&bt2==0)return(1);elseif(bt1==0||bt2==0||bt1->data!=bt2->data)return(0);elsereturn(judgebitree(bt1->lchild,bt2->lchild)*judgebitree(bt1->rchild,bt2->rchild));}設(shè)計兩個有序單鏈表的合并排序算法。voidmergelklist(lklist*ha,lklist*hb,lklist*&hc){lklist*s=hc=0;while(ha!=0&&hb!=0)if(ha->data<hb->data){if(s==0)hc=s=ha;else{s->ne*t=ha;s=ha;};ha=ha->ne*t;}else{if(s==0)hc=s=hb;else{s->ne*t=hb;s=hb;};hb=hb->ne*t;}if(ha==0)s->ne*t=hb;elses->ne*t=ha;}數(shù)據(jù)結(jié)構(gòu)試卷〔六〕參考答案四、算法設(shè)計題設(shè)計在順序有序表中實現(xiàn)二分查找的算法。structrecord{intkey;intothers;};intbisearch(structrecordr[],intk){intlow=0,mid,high=n-1;while(low<=high){mid=(low+high)/2;if(r[mid].key==k)return(mid+1);elseif(r[mid].key>k)high=mid-1;elselow=mid+1;}return(0);}設(shè)計判斷二叉樹是否為二叉排序樹的算法。intminnum=-32768,flag=1;typedefstructnode{intkey;structnode*lchild,*rchild;}bitree;voidinorder(bitree*bt){if(bt!=0){inorder(bt->lchild);if(minnum>bt->key)flag=0;minnum=bt->key;inorder(bt->rchild);}}在鏈?zhǔn)酱鎯Y(jié)構(gòu)上設(shè)計直接插入排序算法voidstraightinsertsort(lklist*&head){lklist*s,*p,*q;intt;if(head==0||head->ne*t==0)return;elsefor(q=head,p=head->ne*t;p!=0;p=q->ne*t){for(s=head;s!=q->ne*t;s=s->ne*t)if(s->data>p->data)break;if(s==q->ne*t)q=p;else{q->ne*t=p->ne*t;p->ne*t=s->ne*t;s->ne*t=p;t=p->data;p->data=s->data;s->data=t;}}}數(shù)據(jù)結(jié)構(gòu)試卷〔七〕參考答案四、算法設(shè)計題設(shè)計在鏈?zhǔn)浇Y(jié)構(gòu)上實現(xiàn)簡單項選擇擇排序算法。voidsimpleselectsorlklist(lklist*&head){lklist*p,*q,*s;intmin,t;if(head==0||head->ne*t==0)return;for(q=head;q!=0;q=q->ne*t){min=q->data;s=q;for(p=q->ne*t;p!=0;p=p->ne*t)if(min>p->data){min=p->data;s=p;}if(s!=q){t=s->data;s->data=q->data;q->data=t;}}}設(shè)計在順序存儲結(jié)構(gòu)上實現(xiàn)求子串算法。voidsubstring(chars[],longstart,longcount,chart[]){longi,j,length=strlen(s);if(start<1||start>length)printf("Thecopypositioniswrong");elseif(start+count-1>length)printf("Toocharacterstobecopied");else{for(i=start-1,j=0;i<start+count-1;i++,j++)t[j]=s[i];t[j]='\0';}}設(shè)計求結(jié)點在二叉排序樹中層次的算法。intlev=0;typedefstructnode{intkey;structnode*lchild,*rchild;}bitree;voidlevel(bitree*bt,int*){if(bt!=0){lev++;if(bt->key==*)return;elseif(bt->key>*)level(bt->lchild,*);elselevel(bt->rchild,*);}}數(shù)據(jù)結(jié)構(gòu)試卷
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年岳麓版選修6歷史下冊階段測試試卷含答案
- 2025年華師大版選修2地理下冊階段測試試卷
- 2025年北師大新版選修5歷史上冊階段測試試卷含答案
- 2025年外研版三年級起點選擇性必修3歷史上冊月考試卷含答案
- 2025年浙教版選修6歷史下冊月考試卷
- 二零二五版面料行業(yè)標(biāo)準(zhǔn)制定與采購合同范本3篇
- 二零二五年度生物制藥項目與派遣公司研發(fā)人員派遣合同4篇
- 二零二五版派遣人力資源管理顧問人才派遣與咨詢合同4篇
- 二零二五版商業(yè)綜合體租賃合同范本4篇
- 二零二五年度個人汽車租賃貸款合同范本3篇
- 選煤廠安全知識培訓(xùn)課件
- 項目前期選址分析報告
- 急性肺栓塞搶救流程
- 《統(tǒng)計學(xué)-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語言-時間序列分析和預(yù)測
- 《形象價值百萬》課件
- 紅色文化教育國內(nèi)外研究現(xiàn)狀范文十
- 中醫(yī)基礎(chǔ)理論-肝
- 小學(xué)外來人員出入校門登記表
- 《土地利用規(guī)劃學(xué)》完整課件
- GB/T 25283-2023礦產(chǎn)資源綜合勘查評價規(guī)范
- 《汽車衡全自動智能稱重系統(tǒng)》設(shè)計方案
評論
0/150
提交評論