一
在每小題列出的四個備選項中只有一個是符合題目要求的
A
C
A
C
A
B
C
D
A
C
A
C
typedef struct node {
char data[
struct node *next;
} LinkStrNode;
A
C
A
C
A
C
A
C
A
C
A
C
A
C
A
C
A
C
A
C
二
q=p;
while(q
三

V={a
E={(a
(
(
(
(
void MergeSorDC(SeqList R
{// 用分治法對 R[low
int mid;
if (low
mid=(low+high)/2; // 分解
MergeSortDC(R, low, mid); // 遞歸地對 R[low..mid] 排序
MergeSortDC(R,mid+1,high); // 遞歸地對 R[mid+1..high] 排序
Merge(R, low, mid, high); // 組合,將兩個有序區歸並為一個有序區
}
} //MergeSortDC
29 .由於元素的插入先後次序不同,所構成的二叉排序樹可能有多種形態。tW.wingwit.cOM請畫出 4 棵含 1 , 2 , 3 , 4 , 5 , 6 六個元素且以 1 為根、深度為 4 的二叉排序樹。
四、算法閱讀題 ( 本大題共 4 小題,每小題 5 分,共 20 分 )
30 . L 為一個帶頭結點的循環鏈表。函數 f30 的功能是刪除 L 中數據域 data 的值大於 c 的所有結點,並由這些結點組建成一個新的帶頭結點的循環鏈表,其頭指針作為函數的返回值。請在空缺處填入合適的內容,使其成為一個完整的算法。
LinkList f30(LinkList L, int c)
{
LinkList Lc,p,pre;
pre=L;
p= (1) ;
Lc=(LinkList) malloc(sizeof(ListNode));
Lc->next=Lc;
while(p!=L)
if(p->data>c)
{
pre->next=p->next;
(2) ;
Lc->next=p;
p=pre->next;
}
else
{
pre=p;
(3) ;
}
return Lc;
}
(1)
(2)
(3)
31 . 設棧 S=(1,2,3,4,5,6,7), 其中 7 為棧頂元素。
( 1 )寫出調用 f31(&S) 後的 S ;
( 2 )簡述函數 f31 中第 1 個循環語句的功能。
void f31 (Stack *S)
{
Queue Q;
Stack T;
int i=0;
InitQueue(&Q);
InitStack(&T);
while(!StackEmpty(S))
if ((i=!t)!=0) Push(&T,Pop(S));
else EnQueue(&Q, Pop(S));
while(!StackEmpty(&T))
Push(S,PoP(&T));
while(!QieueEmpty(&Q))
Push(S,DeQueue(&Q));
}
(1)
(2)
32 .圖的鄰接矩陣表示描述如下:
#define MaxNum 20 // 圖的最大頂點數
typedef struct {
char vexs[MaxNum]; // 字符類型的頂點表
int edges[MaxNum][MaxNum]; // 鄰接矩陣
int n, e; // 圖的頂點數和邊數
} MGraph; // 圖的鄰接矩陣結構描述
閱讀下列算法,並回答問題:
( 1 )對於下列圖 G 的鄰接矩陣,寫出函數調用 f32(&G,3) 的返回值;

( 2 )簡述函數 f32 的功能;
( 3 )寫出函數 f32 的時間復雜度。
int f32(MGraph *G, int i)
{
int d=0,j;
for(j=0;j
{
if (G->edges[i][j]) d++;
From:http://tw.wingwit.com/Article/program/sjjg/201311/23381.html