2023年江西省資料總結綱要

2021-12-22 17:19:42 字數 2472 閱讀 6136

1、題目中要求矩陣兩行元素的平均值按遞增順序排序,由於每行元素個數相等,按平均值排列與按每行元素之和排列是乙個意思。所以應先求出各行元素之和,放入一維陣列中,然後選擇一種排序方法,對該陣列進行排序,注意在排序時若有元素移動,則與之相應的行中各元素也必須做相應變動。

void translation(float *matrix,int n)

//本演算法對n×n的矩陣matrix,通過行變換,使其各行元素的平均值按遞增排列。

//for i

for(i=0; i

sum=p[i]; p[i]=p[k]; p[k]=sum; //交換一維陣列中元素之和.

}//if

}//for i

free(p); //釋放p陣列.

}// translation

[演算法分析] 演算法中使用選擇法排序,比較次數較多,但資料交換(移動)較少.若用其它排序方法,雖可減少比較次數,但資料移動會增多.演算法時間複雜度為o(n2).

2、假設以鄰接矩陣作為圖的儲存結構,編寫演算法判別在給定的有向圖中是否存在乙個簡單有向迴路,若存在,則以頂點序列的方式輸出該迴路(找到一條即可)。(注:圖中不存在頂點到自己的弧)

有向圖判斷迴路要比無向圖複雜。利用深度優先遍歷,將頂點分成三類:未訪問;已訪問但其鄰接點未訪問完;已訪問且其鄰接點已訪問完。

下面用0,1,2表示這三種狀態。前面已提到,若dfs(v)結束前出現頂點u到v的回邊,則圖中必有包含頂點v和u的迴路。對應程式中v的狀態為1,而u是正訪問的頂點,若我們找出u的下一鄰接點的狀態為1,就可以輸出迴路了。

void print(int v,int start ) //輸出從頂點start開始的迴路。

//if

}//print

void dfs(int v)

//if

else

visited[v]=2;

}//dfs

void find_cycle() //判斷是否有迴路,有則輸出鄰接矩陣。visited陣列為全域性變數。

//find_cycle

3、(1)p->rchild (2)p->lchild (3)p->lchild (4)addq(q,p->lchild) (5)addq(q,p->rchild)

25. (1)t->rchild!=null (2)t->rchild!=null (3)n0++ (4)count(t->lchild) (5)count(t->rchild)

26. .(1)top2) stack[top]=p->rchild (3)top++ (4)stack[top]=p->lchild

27. (1)*ppos // 根結點 (2)rpos=ipos (3)rpos–ipos (4)ipos (5)ppos+1

4、請設計乙個演算法,要求該演算法把二叉樹的葉子結點按從左到右的順序連成乙個單鏈表,表頭指標為head。 二叉樹按二叉鍊錶方式儲存,鏈結時用葉子結點的右指標域來存放單鏈表指標。分析你的演算法的時、空複雜度。

5、#define maxsize 棧空間容量

void inouts(int s[maxsize])

//s是元素為整數的棧,本演算法進行入棧和退棧操作。

else s[++top]=x; //x入棧

else //讀入的整數等於-1時退棧。

else printf(「出棧元素是%d\n」,s[top

}}//演算法結

6、由二叉樹的前序遍歷和中序遍歷序列能確定唯一的一棵二叉樹,下面程式的作用是實現由已知某二叉樹的前序遍歷和中序遍歷序列,生成一棵用二叉鍊錶表示的二叉樹並列印出後序遍歷序列,請寫出程式所缺的語句。

#define max 100

typedef struct node

tnode;

char pred[max],inod[max];

main(int argc,int **ar**)

tnode *restore(char *ppos,char *ipos,int n)

postorder(tnode*ptr)

7、由二叉樹的前序遍歷和中序遍歷序列能確定唯一的一棵二叉樹,下面程式的作用是實現由已知某二叉樹的前序遍歷和中序遍歷序列,生成一棵用二叉鍊錶表示的二叉樹並列印出後序遍歷序列,請寫出程式所缺的語句。

#define max 100

typedef struct node

tnode;

char pred[max],inod[max];

main(int argc,int **ar**)

tnode *restore(char *ppos,char *ipos,int n)

{ tnode *ptr; char *rpos; int k;

if(n<=0) return null;

ptr->info=(1)_______;

for((2rposk=(3)_______;

ptr->llink=restore(ppos+1, (4)_______,k );

2023年江西省資料整理綱要

1 設一棵二叉樹的結點結構為 llink,info,rlink root為指向該二叉樹根結點的指標,p 和q分別為指向該二叉樹中任意兩個結點的指標,試編寫一演算法ancestor root,p,q,r 該演算法找到p和q的最近共同祖先結點r。2 給出折半查詢的遞迴演算法,並給出演算法時間複雜度性分析...

2023年江西省資料總結要領

1 本題應使用深度優先遍歷,從主調函式進入dfs v 時,開始記數,若退出dfs 前,已訪問完有向圖的全部頂點 設為n個 則有向圖有根,v為根結點。將n個頂點從1到n編號,各呼叫一次dfs 過程,就可以求出全部的根結點。題中有向圖的鄰接表儲存結構 記頂點個數的變數 以及訪問標記陣列等均設計為全域性變...

2023年江西省資料總結加強

1 設t是一棵滿二叉樹,編寫乙個將t的先序遍歷序列轉換為後序遍歷序列的遞迴演算法。2 設一棵二叉樹的結點結構為 llink,info,rlink root為指向該二叉樹根結點的指標,p 和q分別為指向該二叉樹中任意兩個結點的指標,試編寫一演算法ancestor root,p,q,r 該演算法找到p和...