设为首页    加入收藏

自学考试省级导航

全国 A安徽 B北京 C重庆 F福建 G广东 广西 甘肃 贵州 H河南 河北 湖南 湖北 黑龙江 海南 J江苏 江西 吉林 L辽宁 N内蒙古 宁夏 Q青海 S山东 山西 陕西 四川 上海 T天津
     X新疆 西藏 Y云南 Z浙江 历年真题分类检索

全国2005年1月高等教育自学考试 数据结构试题(三)
2011-12-25 13:30:32 来源:91考试网 作者:www.91exam.org 【
_____。

21.已知一棵二叉树的先序序列为ABCD,中序序列为BCAD,则它的后序序列为______。

22.在含n个顶点的连通图中,任意两个不同顶点之间的一条简单路径最多包含______条边。

23.对关键字序列(50,34,92,19,11,68,56,41,79)进行直接插入排序,当将第7个关键字56插入到当前的有序子表中时,为寻找插入位置需进行______次关键字之间的比较。

24.对有序表进行二分查找的过程可用判定树来描述,其判定树的形态只取决于______。

25.将有序表中n个元素依次插入到一棵空的二叉排序树中,则在等概率查找的情况下,该二叉排序树在查找成功时的平均查找长度是______。

三、解答题(本大题共4小题,每小题5分,共20)

26.(1)写出右侧图形表示的广义表L。

(2)画出其表头与表尾均为(a,(b,c))的广义表L1的图形表。

(1)

(2)

27.试推导一棵满k叉树上的叶子结点数a与非叶子结点数b之间满足以下关系:

    a=(k-1)b+1

28.假设用迪杰斯特拉(Dijkstra)算法求下列图中从顶点a到其余各顶点的最短路径,按求解过程依次写出各条最短路径及其长度。

29.已知关键字序列在R[1..8]中的初始状态为

R

48

70

33

65

24

56

12

92

1

2

3

4

5

6

7

8

  写出在将它调整为大根堆的过程中每一次筛选后R的状态。

四、算法阅读题(本大题共4小题,每小题5分,共20)

30.如果希望循环队列中的向量单元都能得到利用,则可设置一个标志域tag,每当尾指针和头指针值相同时,以tag的值为0或1来区分队列状态是“空”还是“满”。请对下列函数填空,使其分别实现与此结构相应的入队列和出队列的算法。

int EnQueue(CirQueue *Q,DataType x){

if(   (1)   ) return 0;

Q->data[Q->rear]=x;

Q->rear=(Q->rear+1)% MAXQSIZE

   (2)  

return 1;

}

 

int DeQueue(CirQueue *Q,DataType *x){

if(   (3)   ) return 0;

*x=Q->data[Q->front];

Q->front=   (4)   ;

   (5)   ;

return 1;

}

(1)

(2)

(3)

(4)

(5)

31.已知具有n个结点的完全二叉树采用顺序存储结构存储在向量BT[1..n]中,结点的数据元素为字符类型,请阅读下列算法,并回答问题:

(1)假设向量BT中的内容为:

BT

A

B

C

D

E

F

1

2

3

4

5

6

写出执行f31(BT,6)后的输出结果;

(2)说明该算法的功能。

void f31(char BT[],int n)

{ int  i=1;

  while(i>0)

    if(i<=n) {

      printf(″%c″,  BT[i]);

      i=i*2;

    }else{

      do {i=i/2;} while(i%2);

      if(i>0) i++;

    }

}

(1)

(2)

32.设数组f的初始元素序列为:

f[1..9]=(1,3,2,3,3,2,1,2,1)

阅读下列算法,并回答问题。其中算法f32中调用的函数swap(a,b)用以完成交换a和b的值。

(1)写出执行f32(f,9,3,1)之后f[1..9]中的元素序列,并写出在执行过程中调用swap函数的次数。

(2)简述算法f32的功能。

void f32(int f[],int n,int x,int y) {

  int i=1,j=1,k=n;

  while (j<=k)

    if (f[j]==y)j++;

    else if (f[j]==x)

            { swap(f[i],f[j]);i++;j++;}

         else {swap(f[k],f[j];k--;}

}

(1)

(2)

33.下列算法利用二分查找方法在有序表r中插入元素x,并保持表r的有序性,其中参数*n为表r的长度。请在空缺处填入合适的内容,使其成为一个完整的算法。

void BinInsert(SeqList r,int *n,DataType x)

{ int low=1,high=*n,mid,i;

while(low<=high)

{ mid=   (1)   ;

if (x.key<r[mid].key)high=mid-1;

else    (2)   ;

}

for(i=*n;   (3)   ;i--)

r[i+1]=r[i];

   (4)   ;

*n++;

}

(1)

(2)

(3)

(4)

五、算法设计题(本题共10)

34.假设一元多项式以循环链表表示,链表的结点结构为:

typedef struct PNode {

float coef;   //系数

int  exp;     //指数

struct PNode *next;

}*LinkList;

现需要将一个用循环链表h表示的代数多项式拆分成两个多项式循环链表h1和h2,其中h1仅含多项式的奇次项,h2仅含多项式的偶次项。要求利用原链表中的结点构成链表h1和h2。例如多项式7x8+5x3-4x的循环链表为

经拆分之后的情况应是:

请编写完成上述拆分的算法

Tags:
】【打印繁体】 【关闭】 【返回顶部
上一篇全国2004年10月高等教育自学考试 .. 下一篇全国2005年10月高等教育自学考试 ..

网站客服QQ: 960335752 - 14613519 - 48225117