数据结构学位考试试题(8)

2019-04-08 22:21

(1)树中哪个结点为根结点?哪些结点为叶子结点? (2)结点B的双亲为哪个结点?其子女为哪些结点? (3)哪些结点为结点D的兄弟?哪些结点为结点K的兄弟? (4)结点A、C的度分别为多少?树的度为多少? (5)以结点B为根的子树的高度为多少?

答案:(1)A;E,G,H,I,C,J,K,L

(2)A;E,F,G,H,I (3)B,C,L;J

(4)4;0;4 (5)3

56、设某密码电文由a,b,c,d,e,f,h,i 8个字母组成,每个字母在电文中的出现

频率分别是7,19,2,6,32,3,21,10,试为这8个字母设计相应的哈 夫曼编码

答案:a:1110;b:00;c:11010;d:1100;e:10;f:11011;h:01;i:1111 57、设有一无向图G=(V,E),其中

V={1,2,3,4,5,6},E={(1,2),(1,6),(2,6),(1,4),(6,4),(1,3),(3,4),(6,5),(4,5),(1,5),(3,5)}。

(1) 按上述顺序输入后,画出其相应的邻接表;

(2) 在该邻接表上,从顶点4开始,写出DFS序列和BFS序列。

58、已知散列函数为H(K)=K mod 7,健值序列为19, 01, 23, 14, 55, 68, 11, 82, 36,采用拉链法处理冲突,试构造开散列表,并计算查找成功的平均查找长度

参考答案:

开散列表省略, ASL= 13/9

59、已知序列(70,83,100,65,10,32,7,9),请给出采用直接插入排序法对该序列作升

序排序时的每一趟的结果

六、程序填空题

1、p是指向待删结点的前趋结点

void delete_lklist(lklist head,int I) {

p=find_lklist(head,I-1)

if(p!=NULL)&&( ( p–>nex ) !=NULL) {

q= p –>next;

p –>next= ( q –>next ) ; free(q); }

else error(“不存在这样的结点”); }

2、单链表的插入操作

void insert_lklist(lklist head,datatype x,int I) {

p=find_lklist(head,I-1) if(p=NULL)

error(“不存在这样的结点”) else {

s= ( malloc ) (size);

s –>data=( x );

s –>next = p –>next; p –>next=( s ); } }

3、顺序表的插入操作

# define maxsize 100

typedef int DataType; typedef struc{

DataType data[maxsize]; int last; } Sqlist;

Void Insert_sqlist(Sqlist L,DataType x,int I) { if (L.last==( maxsize )) error(“表满”); if(I<( 1 ) || I>( L.last+1 ))

error(“非法位置”); for(j=L. last;j>=I;j--)

L.data[j]= (L.data[j-1] ); L.data[I-1]=x; L. last= ( L.last+1 ); }

4、查找第一个与给定值X相同的表结点的序号。 Pointer find_lklist(lklist head,int I) {

p=( head );j=0;

while(p –>next!=NULL)&&( ( p –> data ) !=x) {

p=( p –>next );j++; }

if p –> data ==x return(p); else return(0); }

5、顺序表上的查找算法。

int Search_Seq(SSTable ST, KeyType key) {。

ST.elem[( 0 )].key = key; // “哨兵”

for (i=ST.length; ST.elem[i].key!=key; ( i-- )); // 从后往前找 return i; // 找不到时,i为0 } // Search_Seq

6、INITIATE()的功能是建立一个空表。请在________处填上正确的语句。 lklist initiate_lklist() /*建立一个空表*/

{__ t=malloc(size)_; ___t –>next=NULL _; return(t); }

7、以下为求单链表表长的运算,分析算法,请在 ________处填上正确的语句。 int length_lklist(lklist head) /*求表head的长度*/ { p=head ;

j=0;

while(p->next!=NULL) {__ p=p –>next _; j++;

}

return(j); /*回传表长*/ }

8、以下对r[h],r[h+1],??r[p]子序列进行一趟快速排序。请分析算法,并在________上填充适当的语句。

int quickpass(list r,int h,int p)

{i=h;j=p;x=r[i];/*置初值,以第一个记录的键值为标准*/ while(i

{while((r[j].key>=x.key)&&(i

{ (r[i]=r[j] );i++;/* 将r[j].kiy

if(i

r[i]=x;return(i);/*一趟快速 排序结束,将x移至正确的位置*/ }

9、在一个单链表中的P所指的结点之前插入一个S所指结点,可执行如下操作。 S->next= ( p->next ) ; p->next=s; t=p->data;

p->data= ( s->data ) ; s->data= ( t ) ;

10、以下算法在有序表R中用二分查找法查找键值等于K的元素,请分析程序,并在________上填充合适的语句。

int binsearch(sqtable R,keytype K)

{low=1;hig=R.n;/*置查找区间初值。low,hig分别标记查找区间的下、上界*/ while(low<=hig)

{mid=(low+hig)/2; switch

{case K==R.item[mid].key:return(mid);/*找到,返回位置mid*/ case KR.item[mid].kiy:__low = mid + 1_;break;/*缩小区间*/ }

}

return(0);/*若区间长度已为0但仍不成功,则返回0,表示查找不成功*/ }

11、以下为单链表的建表算法,分析算法,请在____处填上正确的语句。 lklist create_lklist2() /*直接实现的建表算法。*/

{ head=malloc(size); p=( head );

scanf(“%f”,&x); while(x!=’$’) { q=malloc(size); q->data=x; p->next=q; ( p=q );

scanf(“%f”,&x); }

( p->next=NULL ); return(head); }

12、以下为冒泡排序的算法。请分析算法,并在________上填充适当的语句。 void bulbblesort(int n,list r) /*flag为特征位,定义为布尔型*/ {for(i=1;i=( n-1 );i++) {( flag=1 );

for(j=1;j=n-i;j++)

if(r[j+1].key

13、顺序表的删除操作 # define maxsize 100

typedef int DataType; typedef struc{

DataType data[maxsize]; int last; } Sqlist;

Void delete_sqlist(Sqlist L,int I) {

if(I<1 || I>( L.last+1 )) error(“非法位置”); for(j=I+1;j>= L.last;j++)

L.data[j-2]= ( L.data[j-1] ); L. last=( L. last-1 ); }


数据结构学位考试试题(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:空间直线和平面总结 - 知识结构图+例题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: