版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、(完整)數(shù)據(jù)結(jié)構(gòu)算法設(shè)計題(完整)數(shù)據(jù)結(jié)構(gòu)算法設(shè)計題第 PAGE 15第15頁萬維試題庫系統(tǒng)一、算法設(shè)計題1。 設(shè)二叉樹bt的個數(shù)。【答案】int count=0;void algo2(BTNode *bt)if (bt)if(bt-lchild | btrchild) printf(btdata);count+;algo2(bt-lchild; algo2(btrchild);2。 閱讀下列函數(shù)arrange()int arrange(int a,int 1,int h,int x)/1和h分別為數(shù)據(jù)區(qū)的下界和上界int i,j,t;i=1;j=h; while(iwhile(i=x)i+;
2、 if(ij) t=j;aj=ai;ai=;if(aix) return else return i1;寫出該函數(shù)的功能;寫一個調(diào)用上述函數(shù)實現(xiàn)下列功能的算法:對一整型數(shù)組bn中的元素進(jìn)行重新排列,將所有負(fù)數(shù)數(shù)組中零元素的個數(shù)?!敬鸢浮?1)該函數(shù)的功能是:調(diào)整整數(shù)數(shù)組a中的元素并返回分界值i,使所有x的元素均落在a1。.i上, 使所有x的元素均落在ai1.。h上。(2)int f(int b,int n)或int f(int b,int n)int p,q;int p,q;p=arrange(b,0,n1,0;p=arrange(b,0,n1,1;q= arrange(b,p+1,1,1;q
3、=arrange(b,0,p,0);return qp;return pq;3。 假設(shè)線性表以帶表頭結(jié)點的循環(huán)單鏈表表示。試設(shè)計一個算法,在線性表的第k個元素前插入新元素y。假如表長小于k,則插在表尾?!敬鸢浮縱oid algo1(LNode h,int k,ElemType y) q=h; P=hnext; j=1;while( p!=h & jdata a)count+; f34(plchild);return count;5。 設(shè)二叉樹T采用二叉鏈表結(jié)構(gòu)存儲,試設(shè)計算法求出二叉樹中離根最近的第一個葉子結(jié)點(從上往下,自左至右次序編號)【答案】BTNode * Firstleaf(BTNo
4、de *bt) InitQueue(Q); /初始化隊列Q if(bt)EnQueue(Q,bt); while(!EmptyQueue(Q) DeQueue(Q,p);if(!plchild & !p-rchild) return if(p- lchild) EnQueue(Q,p-lchild); if(p-rchild) EnQueue(Q,prchild);6。 已知一棵具有n個結(jié)點的完全二叉樹被順序存儲在一維數(shù)組中,結(jié)點為字符類型,編寫算法打印出編號為k的結(jié)點的雙親和孩子結(jié)點?!敬鸢浮縤nt algo2(charbt,int n,int k if (k1|kn) return 0;i
5、f( k=1) printf(“ %c is a rootn”,bt1);else printf(“%csparent iscn”, btk,btk/2; if(2knext; p=p- next); for(j=1,q=ha;ji; j+)q=qnext; p-next=qnext;qnext=hbnextfree(hb;8。 設(shè)二叉樹T已按完全二叉樹的形式存儲在順序表T中,試設(shè)計算法根據(jù)順序表T建立該二叉樹的二叉鏈表結(jié)構(gòu).順序表T定義如下:struct treeintno;/*結(jié)點按完全二叉樹的編號/ ElEMTP data;/ 數(shù)據(jù)域 */TN;/N為二叉樹T的結(jié)點數(shù)*/【答案】BTNo
6、de creat_tree(struct tree TN) BTNode pMAX; t=NULL;for(i=0;iN;i+)s=BTNode c(f() s-data=Ti.data;slchild=s-rchild=NULL; m=Ti.no;pm=s; if(m=1) t=s;else j=m/2;if(m%2=0) pjlchild=s; else pjrchild=s;/slse/for return t;/ creat_tree9。 編寫算法判斷帶表頭結(jié)點的單鏈表L是否是遞增的。若遞增返回1,否則返回0。【答案】intalgo1 (LNode L)if(!L-next) retu
7、rn 1; p=L- next; while(pnext)if(p-data next-data) p=pnext; else return 0;return 1;10。 假設(shè)一線性表由Fibonacci數(shù)列的前nFibonacci1(n=1)f(n)= 1(n=2)f(n-2)+f(n-1) (n3)【答案】LNode Creatlist(LNode *h,int n) h=(LNode )malloc(sizeof(Lnode); hdata=n;h-next=p=(LNode*)malloc(sizeof(Lnode); pnext=q=(LNode )c(fe) p-data= q-d
8、ata=1for(i=3;inext=s=(LNode *)malloc (sizeof(Lnode); sdata=pdata+q-data; snext=NULL; p=q;q=s; returnh;11. 設(shè)二叉樹T采用二叉鏈表結(jié)構(gòu)存儲,數(shù)據(jù)元素為字符類型。設(shè)計算法將二叉鏈表中所有data域為小寫字母的結(jié)點改為大寫字母?!敬鸢浮縱oidalgo2BTNodet if(btif(bt-data=a bt-data=z)bt-data=32;algo2(btlchild); algo2(bt-rchild);12。 假設(shè)線性表以帶表頭結(jié)點的循環(huán)單鏈表表示。試設(shè)計一個算法,在線性表的第k個元素
9、前插入新元素y。假如表長小于k,則插在表尾。【答案】void Insertlist(LNode *h,int k,ElemType y)q=h; P=h-next; j=1; while(p!=hjq=p;p=pnext;j+;s=(LNode )fe sdata=y;qnext=s; s-next=q;13. x,使得插入后的單鏈表仍有序?!敬鸢浮縱oid algo1 (LNode *H, ElemTp x)s=(LNode ) malloc (sizeof(LNode)); s-data=x;q=H; p=H-next;while ( p pdata=x )q=p; p=pnext;sne
10、xt=p; q-next=s;14。 二叉排序樹的類型定義如下:typedef struct BSTNode 二叉排序樹的結(jié)點結(jié)intdata;數(shù)據(jù)域struct BSTNode *lchild, rchild; 左、右孩子指針BSTNode,BSTree;設(shè)計遞歸算法,統(tǒng)計一棵二叉排序樹T中值小于a的結(jié)點個數(shù)?!敬鸢浮縤nt f34(BSTree root)int count; BSTNode p; p=root;if ( p & p datanext;if(q-data=0& q-data =9)p-next=qnext;free(q);elsep=q;16. 利用棧的基本運算,編寫一個算
11、法,實現(xiàn)將整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)輸出?!敬鸢浮縱oid returnDtoO(int num)initStack(s; while(n) k=n%2;n=n/2;push(s,k);while(EmptyStack(s)) pop(s,k);printf(“d”,k);17。 設(shè)二叉樹T采用二叉鏈表結(jié)構(gòu)存儲,數(shù)據(jù)元素為int型,試設(shè)計一個算法,若結(jié)點左孩子的data域的值大于右孩子的data域的值,則交換其左、右子樹?!敬鸢浮縱oid algo2(bitreptr bt) bitreptr x;if (bt)if (bt-lchild & btrchild) & (btlchild data bt
12、rchild-data) ) x= btlchild ;btlchild= btrchild; bt-rchild=x;algo2(bt-lchild); algo2(bt-rchild);18. 設(shè)二叉樹T采用二叉鏈表結(jié)構(gòu)存儲,試設(shè)計算法求出二叉樹的深度。【答案】int Deep(BTNode bt)if (bt=NULL) return 0; left=Deep(bt-lchild); right=Deep(bt-rchild);return (leftright?left:right)+1;19。 設(shè)給定的哈希表存儲空間為H(0M1),哈希函數(shù)的構(gòu)造方法為“除留余數(shù)法”,處理沖突的方法為
13、“線性探測法”,設(shè)計算法將元素e填入到哈希表中?!敬鸢浮縱oid hashinsert(hashTable h,int m,ElemType e) j=ep;if(hj!=NULL) hj=e; elsedo j=(j+1) %m;while(hj!=NULL ); hj=e;(利用棧)【答案】void DecToOct(int num)initStack(s;/ while(n) k=n%8;n=n/8;push(s,k);while(EmptyStack(s)/判斷棧是否為空 pop(sk; printf(“d”,k);“abcba”和“1221”“abcde為結(jié)束符的字符序列是否是回文。
14、【答案】int Pair(char str ) InitStack(s; p=strfor ( ; *p!=; p+ ) Push(s,*p);while(StackEmpty(s)) Pop(s,y);if(y!=*str+ ) return 0;return 1;22。 值相同的結(jié)點(【答案】void Delsame (LNode *h)if(h-next) for(p=ht;t) q=pnext;if(pdata=q-a p-next=qnext;free(q);else p=q;23. 編寫一個算法,判斷帶表頭結(jié)點的單鏈表是否遞增有序。【答案】int fun(LNode *h ) p=
15、h-next; while(p- q=p-next ; if(qdatapdata)return p=q;return 1;24。 假設(shè)有兩個帶表頭結(jié)點的單鏈表HA和HBHBHA的第i(0i表長)結(jié)點前。【答案】void fun(LNode *ha, LNode *hb,int i) for(p=hb;p-next; p=pnext); for(j=1,q=ha;ji; j+)q=qnext; ; p-next=qnext;q-next=hb-nextfree(hb);25。 typedef struct nodeDataType data; struct node *nextLinkNode
16、, *LinkList;編寫算法,從有序表A中刪除所有和有序表B中元素相同的結(jié)點.【答案】(空)設(shè)二叉樹Tdata字母和數(shù)字字符的結(jié)點個數(shù).【答案】int letter=0,digit=0;/全局變量void algo2(BTNode btif (btif(btdata=A& =Z| btdata=a& bt-datadata=0& bt-data=9) digit +;algo2(btlchild); algo2(bt-rchild);typedef struct node DataType data; struct node LinkNode, *LinkList;編寫算法,將一個頭指針為
17、head且不帶頭結(jié)點的單鏈表改造為一個含頭結(jié)點且頭指針仍為head的單向循環(huán)鏈表,并分析算法的時間復(fù)雜度?!敬鸢浮縇inkList f34(LinkList head)LinkList p,s; p=head;while (p-next)p=p- next; s=(LinkList)malloc(sizeof(LinkNode); s-next=head;pnext=s; head=s; return head;時間復(fù)雜度為:O(n)28。 假設(shè)有向圖以鄰接表方式存儲,編寫一個算法判別頂點v 到頂點v 是否存在弧。ij【答案】int IsArcs(ALgraph G,int i,int j)
18、/ 判斷有向圖G中頂點i到頂點j是否有弧,是則返回1,否則返回0*/ p=Gi.firstarc;while (p!=NULL) if(padjvex =j)return 1; p=p-nextarc;return 0;設(shè)二叉樹Tdata的結(jié)點個數(shù)。【答案】int count=0;/* count為全局變量*/void algo2(BTNode *bt) if (bt)if(bt-data=A&btdatarchild);typedef struct dunodechar data;struct dunode prior, *next;DuNode;現(xiàn)用該鏈表存放字符串,編寫一個算法 ,判斷該字符串是否中心對稱關(guān)系。例如字符串“xyzzyx”和“xyzyx” 都是中心對稱的?!敬鸢浮縤nt fun(DuNode *h ) p=hnext;q=hprior; while(p!=q & pprior!=q)if(q-data=p-data) r else return 0;return
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第四章 習(xí)題7 教案-湘教版數(shù)學(xué)選修2-2
- 《做一個合格的傾聽者》人際交往主題教學(xué)設(shè)計
- 文言文閱讀訓(xùn)練:《北史-魏收傳》(附答案解析與譯文)
- 2024年值班員月度考試練習(xí)卷含答案
- 班主任之友讀后感
- 采礦高級工程師職稱技術(shù)總結(jié)(15篇)
- 汽機(jī)運行專項測試題有答案(一)
- 3.2有多少名觀眾(進(jìn)階作業(yè))2024-2025學(xué)年四年級上冊數(shù)學(xué) 北師大版(含解析)
- 遼寧省鞍山市岫巖縣2024-2025學(xué)年七年級上學(xué)期(10月份)月考英語試卷
- DB34∕T 4197-2022 玉米田草地貪夜蛾綠色防控技術(shù)規(guī)程
- 鋼結(jié)構(gòu)檢測報告模板(含檢測原始記錄).doc
- 《物質(zhì)的導(dǎo)電性》說課稿
- 國家危險廢物豁免管理清單
- 詞語接龍教學(xué)計劃(共2頁)
- 吉林停工留薪期分類目錄
- 《2021國標(biāo)暖通圖集資料》03R401-2 開式水箱
- 培育職業(yè)煙農(nóng)的重要性及對策
- 木材樹種名稱中英文拉丁文對照
- 世界主要氣候類型分布圖
- 事業(yè)單位公開招聘分類考試《綜合應(yīng)用能力(A類)》真題(二)-綜合應(yīng)用能力
- CT26-型彈簧操動機(jī)構(gòu)
評論
0/150
提交評論