1、設有兩個集合a和集合b,要求設計生成集合c=a∩b的演算法,其中集合a、b和c用鏈式儲存結構表示。
typedef struct node lklist;
void intersection(lklist *ha,lklist *hb,lklist *&hc)}}
2、給定n個村莊之間的交通圖,若村莊i和j之間有道路,則將頂點i和j用邊連線,邊上的wij表示這條道路的長度,現在要從這n個村莊中選擇乙個村莊建一所醫院,問這所醫院應建在哪個村莊,才能使離醫院最遠的村莊到醫院的路程最短?試設計乙個解答上述問題的演算法,並應用該演算法解答如圖所示的例項。20分
void hospital(adjmatrix w,int n)
//在以鄰接帶權矩陣表示的n個村莊中,求醫院建在何處,使離醫院最遠的村莊到醫院的路徑最短。
//在最長路徑中,取最短的一條。m記最長路徑,k記出發頂點的下標。
printf(「醫院應建在%d村莊,到醫院距離為%d\n」,i,m);
}//for
}//演算法結束
對以上例項模擬的過程略。各行中最大數依次是9,9,6,7,9,9。這幾個最大數中最小者為6,故醫院應建在第三個村莊中,離醫院最遠的村莊到醫院的距離是6。
1、對圖1所示的連通網g,請用prim演算法構造其最小生成樹(每選取一條邊畫乙個圖)。
3、設t是一棵滿二叉樹,編寫乙個將t的先序遍歷序列轉換為後序遍歷序列的遞迴演算法。
4、有一種簡單的排序演算法,叫做計數排序(count sorting)。這種排序演算法對乙個待排序的表(用陣列表示)進行排序,並將排序結果存放到另乙個新的表中。必須注意的是,表中所有待排序的關鍵碼互不相同,計數排序演算法針對表中的每個記錄,掃瞄待排序的表一趟,統計表中有多少個記錄的關鍵碼比該記錄的關鍵碼小,假設針對某乙個記錄,統計出的計數值為c,那麼,這個記錄在新的有序表中的合適的存放位置即為c。
(1) (3分)給出適用於計數排序的資料表定義;
(2) (7分)使用pascal或c語言編寫實現計數排序的演算法;
(3) (4分)對於有n個記錄的表,關鍵碼比較次數是多少?
(4) (3分)與簡單選擇排序相比較,這種方法是否更
好?為什麼?
5、後序遍歷最後訪問根結點,即在遞迴演算法中,根是壓在棧底的。採用後序非遞迴演算法,棧中存放二叉樹結點的指標,當訪問到某結點時,棧中所有元素均為該結點的祖先。本題要找p和q 的最近共同祖先結點r ,不失一般性,設p在q的左邊。
後序遍歷必然先遍歷到結點p,棧中元素均為p的祖先。將棧拷入另一輔助棧中。再繼續遍歷到結點q時,將棧中元素從棧頂開始逐個到輔助棧中去匹配,第乙個匹配(即相等)的元素就是結點p 和q的最近公共祖先。
typedef struct
stack;
stack s,s1;//棧,容量夠大
bitree ancestor(bitree root,p,q,r)//求二叉樹上結點p和q的最近的共同祖先結點r。
//沿左分枝向下
if(bt==p) //不失一般性,假定p在q的左側,遇結點p時,棧中元素均為p的祖先結點
//將棧s的元素轉入輔助棧s1 儲存
if(bt==q) //找到q 結點。
for(i=top;i>0;i--)//;將棧中元素的樹結點到s1去匹配
}while(top!=0 && s[top].tag==1) top退棧
if (top!=0){s[top].tag=1;bt=s[top].t->rchild;} //沿右分枝向下遍歷
}//結束while(bt!=null ||top>0)
return(null);//q、p無公共祖先
}//結束ancestor
6、設有一組初始記錄關鍵字為(45,80,48,40,22,78),要求構造一棵二叉排序樹並給出構造過程。
7、二部圖(bipartite graph) g=(v,e)是乙個能將其結點集v分為兩不相交子集v 1和v2=v-v1的無向圖,使得:v1中的任何兩個結點在圖g中均不相鄰,v2中的任何結點在圖g中也均不相鄰。
(1).請各舉乙個結點個數為5的二部圖和非二部圖的例子。
(2).請用c或pascal編寫乙個函式bipartite判斷乙個連通無向圖g是否是二部圖,並分析程式的時間複雜度。設g用二維陣列a來表示,大小為n*n(n為結點個數)。請在程式中加必要的注釋。
若有必要可直接利用堆疊或佇列操作。【
8、設有乙個陣列中存放了乙個無序的關鍵序列k1、k2、…、kn。現要求將kn放在將元素排序後的正確位置上,試編寫實現該功能的演算法,要求比較關鍵字的次數不超過n。
51. 借助於快速排序的演算法思想,在一組無序的記錄中查詢給定關鍵字值等於key的記錄。設此組記錄存放於陣列r[l..
h]中。若查詢成功,則輸出該記錄在r陣列中的位置及其值,否則顯示「not find」資訊。請編寫出演算法並簡要說明演算法思想。
9、設有一組初始記錄關鍵字序列(k1,k2,…,kn),要求設計乙個演算法能夠在o(n)的時間複雜度內將線性表劃分成兩部分,其中左半部分的每個關鍵字均小於ki,右半部分的每個關鍵字均大於等於ki。
void quickpass(int r, int s, int t)
//查詢a[i]的插入位置
if(p==h || p->data!=a[i重複資料不再輸入
}//for
return(h);
}演算法結束
14、(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
15、給定n個村莊之間的交通圖,若村莊i和j之間有道路,則將頂點i和j用邊連線,邊上的wij表示這條道路的長度,現在要從這n個村莊中選擇乙個村莊建一所醫院,問這所醫院應建在哪個村莊,才能使離醫院最遠的村莊到醫院的路程最短?試設計乙個解答上述問題的演算法,並應用該演算法解答如圖所示的例項。20分
void hospital(adjmatrix w,int n)
//在以鄰接帶權矩陣表示的n個村莊中,求醫院建在何
處,使離醫院最遠的村莊到醫院的路徑最短。
//在最長路徑中,取最短的一條。m記最長路徑,k記出發頂點的下標。
printf(「醫院應建在%d村莊,到醫院距離為%d\n」,i,m);
}//for
}//演算法結束對以上例項模擬的過程略。各行中最大數依次是9,9,6,7,9,9。這幾個最大數中最小者為6,故醫院應建在第三個村莊中,離醫院最遠的村莊到醫院的距離是6。
1、對圖1所示的連通網g,請用prim演算法構造其最小生成樹(每選取一條邊畫乙個圖)。
16、二部圖(bipartite graph) g=(v,e)是乙個能將其結點集v分為兩不相交子集v 1和v2=v-v1的無向圖,使得:v1中的任何兩個結點在圖g中均不相鄰,v2中的任何結點在圖g中也均不相鄰。
(1).請各舉乙個結點個數為5的二部圖和非二部圖的例子。
(2).請用c或pascal編寫乙個函式bipartite判斷乙個連通無向圖g是否是二部圖,並分析程式的時間複雜度。設g用二維陣列a來表示,大小為n*n(n為結點個數)。請在程式中加必要的注釋。
若有必要可直接利用堆疊或佇列操作。【
17、題目中要求矩陣兩行元素的平均值按遞增順序排序,由於每行元素個數相等,按平均值排列與按每行元素之和排列是乙個意思。所以應先求出各行元素之和,放入一維陣列中,然後選擇一種排序方法,對該陣列進行排序,注意在排序時若有元素移動,則與之相應的行中各元素也必須做相應變動。
void translation(float *matrix,int n)
//本演算法對n×n的矩陣matrix,通過行變換,使其各行元素的平均值按遞增排列。
//在最長路徑中,取最短的一條。m記最長路徑,k記出發頂點的下標。
printf(「醫院應建在%d村莊,到醫院距離為%d\n」,i,m);
}//for
}//演算法結束對以上例項模擬的過程略。各行中最大數依次是9,9,6,7,9,9。這幾個最大數中最小者為6,故醫院應建在第三個村莊中,離醫院最遠的村莊到醫院的距離是6。
1、對圖1所示的連通網g,請用prim演算法構造其最小生成樹(每選取一條邊畫乙個圖)。
25、設指標變數p指向雙向鍊錶中結點a,指標變數q指向被插入結點b,要求給出在結點a的後面插入結點b的操作序列(設雙向鍊錶中結點的兩個指標域分別為llink和rlink)。
2023年新疆維吾爾自治區資料總結綱要
1 連通圖的生成樹包括圖中的全部n個頂點和足以使圖連通的n 1條邊,最小生成樹是邊上權值之和最小的生成樹。故可按權值從大到小對邊進行排序,然後從大到小將邊刪除。每刪除一條當前權值最大的邊後,就去測試圖是否仍連通,若不再連通,則將該邊恢復。若仍連通,繼續向下刪 直到剩n 1條邊為止。void spnt...
2023年新疆維吾爾自治區資料總結要領
1 陣列a和b的元素分別有序,欲將兩陣列合併到c陣列,使c仍有序,應將a和b拷貝到c,只要注意a和b陣列指標的使用,以及正確處理一陣列讀完資料後將另一陣列餘下元素複製到c中即可。void union int a,b,c,m,n 整型陣列a和b各有m和n個元素,前者遞增有序,後者遞減有序,本演算法將a...
2023年新疆維吾爾自治區資料總結入門
1 設有兩個集合a和集合b,要求設計生成集合c a b的演算法,其中集合a b和c用鏈式儲存結構表示。typedef struct node lklist void intersection lklist ha,lklist hb,lklist hc 2 二部圖 bipartite graph g ...