2023年山東省資料總結深入

2021-11-01 18:07:05 字數 1400 閱讀 7200

1、 將頂點放在兩個集合v1和v2。對每個頂點,檢查其和鄰接點是否在同乙個集合中,如是,則為非二部圖。為此,用整數1和2表示兩個集合。再用一佇列結構存放圖中訪問的頂點。

int bpgraph (adjmatrix g)

//判斷以鄰接矩陣表示的圖g是否是二部圖。

//初始化,各頂點未確定屬於那個集合

q[1]=1; r=1; s[1]=1;//頂點1放入集合s1

while(f //鄰接點入佇列

else if (s[j]==s[v]) return(0);} //非二部圖

}//if (!visited[v])

}//while

return(1); }//是二部圖

[演算法討論] 題目給的是連通無向圖,若非連通,則演算法要修改。

2、陣列a和b的元素分別有序,欲將兩陣列合併到c陣列,使c仍有序,應將a和b拷貝到c,只要注意a和b陣列指標的使用,以及正確處理一陣列讀完資料後將另一陣列餘下元素複製到c中即可。

void union(int a,b,c,m,n)

//整型陣列a和b各有m和n個元素,前者遞增有序,後者遞減有序,本演算法將a和b歸併為遞增有序的陣列c。

演算法結束

4、要求二叉樹按二叉鍊錶形式儲存。15分

(1)寫乙個建立二叉樹的演算法。(2)寫乙個判別給定的二叉樹是否是完全二叉樹的演算法。

bitree creat建立二叉樹的二叉鍊錶形式的儲存結構

else error(「輸入錯誤」);

return(bt);

}//結束 bitree

int judgecomplete(bitree bt) //判斷二叉樹是否是完全二叉樹,如是,返回1,否則,返回0

//while

return 1; } //judgecomplete

3、我們可用「破圈法」求解帶權連通無向圖的一棵最小代價生成樹。所謂「破圈法」就是「任取一圈,去掉圈上權最大的邊」,反覆執行這一步驟,直到沒有圈為止。請給出用「破圈法」求解給定的帶權連通無向圖的一棵最小代價生成樹的詳細演算法,並用程式實現你所給出的演算法。

注:圈就是迴路。

4、有一種簡單的排序演算法,叫做計數排序(count sorting)。這種排序演算法對乙個待排序的表(用陣列表示)進行排序,並將排序結果存放到另乙個新的表中。必須注意的是,表中所有待排序的關鍵碼互不相同,計數排序演算法針對表中的每個記錄,掃瞄待排序的表一趟,統計表中有多少個記錄的關鍵碼比該記錄的關鍵碼小,假設針對某乙個記錄,統計出的計數值為c,那麼,這個記錄在新的有序表中的合適的存放位置即為c。

(1) (3分)給出適用於計數排序的資料表定義;

(2) (7分)使用pascal或c語言編寫實現計數排序的演算法;

(3) (4分)對於有n個記錄的表,關鍵碼比較次數是多少?

(4) (3分)與簡單選擇排序相比較,這種方法是否更好?為什麼?

2023年山東省資料總結深入

1 我們用l代表最長平台的長度,用k指示最長平台在陣列b中的起始位置 下標 用j記住區域性平台的起始位置,用i指示掃瞄b陣列的下標,i從0開始,依次和後續元素比較,若區域性平台長度 i j 大於l時,則修改最長平台的長度k l i j 和其在b中的起始位置 k j 直到b陣列結束,l即為所求。voi...

2023年雲南省資料總結深入

1 有乙個帶頭結點的單鏈表,每個結點包括兩個域,乙個是整型域info,另乙個是指向下乙個結點的指標域next。假設單鏈表已建立,設計演算法刪除單鏈表中所有重複出現的結點,使得info域相等的結點只保留乙個。include typedef char datatype typedef struct no...

2023年福建省資料總結深入

1 設t是給定的一棵二叉樹,下面的遞迴程式count t 用於求得 二叉樹t中具有非空的左,右兩個兒子的結點個數n2 只有非空左兒子的個數nl 只有非空右兒子的結點個數nr和葉子 結點個數n0。n2 nl nr n0都是全域性量,且在呼叫count t 之前都置為0.typedef struct n...