四、算法閱讀題(本大題共4小題,每小題5分,共20分)
30.閱讀下列程序。
void f30(int A[], int n)
{
int i,j,m;
for (i=1;i<n;i++)
for (j=0;j<i;j++)
{
m=A[i*n+j];
A[i*n+j]=A[j*n+i];
A[j*n+i]=m;
}
}
回答下列問題:
(1)已知矩陣B= ,將其按行優(yōu)先存于一維數(shù)組A中,給出執(zhí)行函數(shù)調(diào)
用f30(A,3)后矩陣B的值;
(2)簡述函數(shù)f30的功能。
31.假設(shè)以二叉鏈表表示二叉樹,其類型定義如下:
typedef struct node {
char data;
struct node*Ichild, *rchild; ∥左右孩子指針
} *BinTree;
閱讀下列程序。
void f31(BinTree T)
{
InitStack(S); ∥ 初始化一個(gè)堆棧S
while (T || !StackEmpty(S)
{
while (T)
{
Push(S,T); T=T->lchild;
}
if (!StackEmpty(S))
{
T=Pop(S); printf(“%c”,T->data); T=T->rchild;
}
}
}
回答下列問題:
(1)已知以T為根指針的二叉樹如圖所示,
請寫出執(zhí)行f31(T)的輸出結(jié)果:
(2)簡述算法f31的功能。
32.閱讀下列程序。
void f32(int A[],int n)
{
int i,j,m=l,t;
for (i=0; i<n-l&&m; i++)
{
for (j=0; j<n; j++)
printf(“%d ”,A[j]);
printf(“\n”);
m=0:
for (j=1; j<n-i; j++)
if (A[j-1]>A[j])
{
t=A[j-l];
A[j-1]=A[j];
A[j]=t;
m=1;
}
}
}
回答問題:
已知整型數(shù)組A[ ]={34,26,15,89,42},寫出執(zhí)行函數(shù)調(diào)用f32(A,5)后的輸出結(jié)果。
33.已知順序表的表結(jié)構(gòu)定義如下:
#define MAXLEN 100
typedef int KeyType;
typedef struct {
KeyType key;
InfoType otherinfo;
} NodeType;
typedef NodeType SqList[MAXLEN];
閱讀下列程序。
Int f33(SqList R,NodeType X, int p, int q)
{ int m;
if (p>q) return -1;
m=(p+q)/2;
if (R[m].key==X.key) return m;
if (R[m].key>X.key) return f33(R,X,p,m-l);
else return f33(R,X,m+l,q);
}
請回答下列問題:
(1)若有序的順序表R的關(guān)鍵字序列為(2,5,13,26,55,80,105),分別寫出X.key=18和X.key=26時(shí),執(zhí)行函數(shù)調(diào)用f33(R,X,0,6)的函數(shù)返回值。
(2)簡述算法f33的功能。