一
在每小題列出的四個備選項中只有一個是符合題目要求的
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