数据结构习题及参考答案.docx

上传人:b****5 文档编号:3417351 上传时间:2022-11-22 格式:DOCX 页数:12 大小:22.55KB
下载 相关 举报
数据结构习题及参考答案.docx_第1页
第1页 / 共12页
数据结构习题及参考答案.docx_第2页
第2页 / 共12页
数据结构习题及参考答案.docx_第3页
第3页 / 共12页
数据结构习题及参考答案.docx_第4页
第4页 / 共12页
数据结构习题及参考答案.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数据结构习题及参考答案.docx

《数据结构习题及参考答案.docx》由会员分享,可在线阅读,更多相关《数据结构习题及参考答案.docx(12页珍藏版)》请在冰豆网上搜索。

数据结构习题及参考答案.docx

数据结构习题及参考答案

数据结构习题及参考答案

一、判断下列叙述的对错。

  

(1)线性表的逻辑顺序与物理顺序总是一致的。

  

(2)线性表的顺序存储表示优于链式存储表示。

  (3)线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。

  (4)二维数组是其数组元素为线性表的线性表。

  (5)每种数据结构都应具备三种基本运算:

插入、删除和搜索。

  二、设单链表中结点的结构为

  typedefstructnode{file:

//链表结点定义

  ElemTypedata;file:

//数据

  structnode*Link;file:

//结点后继指针

  }ListNode;

  

(1)已知指针p所指结点不是尾结点,若在*p之后插入结点*s,则应执行下列哪一个操作?

  A.s->link=p;p->link=s;

  B.s->link=p->link;p->link=s;

  C.s->link=p->link;p=s;

  D.p->link=s;s->link=p;

  

(2)非空的循环单链表first的尾结点(由p所指向)满足:

  A.p->link==NULL;

  B.p==NULL;

  C.p->link==first;

  D.p==first;

  三、设有一个顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素的出栈顺序为s2,s3,s4,s6,s5,s1,则顺序栈的容量至少应为多少?

  四、一棵具有n个结点的理想平衡二叉树(即除离根最远的最底层外其他各层都是满的,最底层有若干结点)有多少层?

若设根结点在第0层,则树的高度h如何用n来表示(注意n可能为0)?

  五、从供选择的答案中选择与下面有关图的叙述中各括号相匹配的词句,将其编号填入相应的括号内。

  

(1)对于一个具有n个结点和e条边的无向图,若采用邻接表表示,则顶点表的大小为(A),所有边链表中边结点的总数为(B)。

  

(2)采用邻接表存储的图的深度优先遍历算法类似于树的(C)。

  (3)采用邻接表存储的图的广度优先遍历算法类似于树的(D)。

  (4)判断有向图是否存在回路,除了可以利用拓扑排序方法外,还可以利用(E)。

  供选择的答案

  A:

①n②n+1③n-1④n+e

  B:

①e/2②e③2e④n+e

  C~D:

①中根遍历②先根遍历③后根遍历④按层次遍历

  E:

①求关键路径的方法②求最短路径的Dijkstra方法

  ③深度优先遍历算法④广度优先遍历算法

  六、填空题

  

(1)在用于表示有向图的邻接矩阵中,对第i行的元素进行累加,可得到第i个顶点的(①)度,而对第j列的元素进行累加,可得到第j个顶点的(②)度。

  

(2)一个连通图的生成树是该图的(③)连通子图。

若这个连通图有n个顶点,则它的生成树有(④)条边。

  (3)给定序列{100,86,48,73,35,39,42,57,66,21},按堆结构的定义,则它一定(⑤)堆。

  (4)在进行直接插入排序时,其数据比较次数与数据的初始排列(⑥)关;而在进行直接选择排序时,其数据比较次数与数据的初始排列(⑦)关。

  (5)利用关键码分别为10,20,30,40的四个结点,能构造出(⑧)种不同的二叉搜索树。

  七、设带表头结点的双向链表的定义为

  typedefintElemType;

  typedefstructdnode{file:

//双向链表结点定义

  ElemTypedata;file:

//数据

  structdnode*lLink,*rLink;file:

//结点前驱与后继指针

  DblNode;

  typedefDblNode*DblList;file:

//双向链表

  试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域lLink把所有结点按照其值从小到大的顺序连接起来。

  八、设有一个关键码的输入序列{55,31,11,37,46,73,63,02,07,

  

(1)从空树开始构造平衡二叉搜索树,画出每加入一个新结点时二叉树的形态。

若发生不平衡,指明需做的平衡旋转的类型及平衡旋转的结果。

  

(2)计算该平衡二叉搜索树在等概率下的查找成功的平均查找长度和查找不成功的平均查找长度。

  九、下面是求连通网络的最小生成树的Prim算法的实现,中间有5个地方缺失,请阅读程序后将它们补上。

  constintMaxInt=INT_MAX;file:

//INT_MAX的值在中

  constintn=6;file:

//图的顶点数,应由用户定义

  typedefintAdjMatrix[n>[n>;file:

//用二维数组作为邻接矩阵表示

  typedefstructfile:

//生成树的边结点

  intfromVex,toVex;file:

//边的起点与终点

  intweight;file:

//边上的权值

  TreeEdgeNode;

  typedefTreeEdgeNodeMST[n-1>;file:

//最小生成树定义

  voidPrimMST(AdjMatrixG,MSTT,intrt){

  file:

//从顶点rt出发构造图G的最小生成树T,rt成为树的根结点

  TreeEdgeNodee;inti,k=0,min,minpos,v;

  for(i=0;i

//初始化最小生成树T

  if(i!

=rt){

  T[k>.fromVex=rt;

  T[k>.toVex=I;

  T[k++>.weight=G[rt>;

  }

  for(k=0;k

//依次求MST的候选边

  min=MaxInt;

  for(i=k;i

//遍历当前候选边集合

  if(T.weight

//选具有最小权值的候选边

  {min=T.weight;minpos=i;}

  if(min==MaxInt)file:

//图不连通,出错处理

  {cerr《“Graphisdisconnected!

”《endl;exit

(1);}

  e=T[minpos>;T[minpos>=T[k>;T[k>=e;

  v=T[k>.toVex;

  for(i=k+1;i

//修改候选边集合

  if(G[v>[T.toVex>

  T.weight=G[v>[T.toVex>;

  T.fromVex=v;

  参考答案

  一、

(1)错

(2)错(3)对(4)错(5)对

  二、

(1)B

(2)C

  三、3

  四、h=élog2(n+1)ù-1

  五、A.①B.③C.②D.④E.③

  六、①出②入③极小④n-1

  ⑤是(最小)⑥有⑦无⑧14

  七、算法如下

  voidsort(DblNode*L){

  DblNode*s=L->rlink;

  file:

//指针s指向待插入结点,初始时指向第一个结点

  while(s!

=NULL){file:

//处理所有结点

  pre=L;p=L->lLink;

  file:

//指针p指向待比较的结点,pre是p的前驱指针

  while(p!

=NULL&&s->datadata)

  file:

//循lLink链寻找结点*s的插入位置

  {pre=p;p=p->lLink;}

  pre->lLink=s;s->lLink=p;s=s->rLink;

  file:

//结点*s在lLink方向插入到*pre与*p之间

  }

  八、关键码的输入序列{55,31,11,37,46,73,63,02,07}

  在等概率下查找成功的平均查找长度

  在等概率下查找不成功的平均查找长度

  九

  ①T[k>.toVex=i

  ②min=MaxInt

  ③minpos=i

  ④exit

(1)

  ⑤T.fromVex=v

一、单项选择题

1.算法指的是(  )

  A.计算机程序      B.解决问题的计算方法

  C.排序算法        D.解决问题的有限运算序列

2.线性表采用链式存储时,结点的存储地址(  )

  A.必须是不连续的

  B.连续与否均可

  C.必须是连续的

  D.和头结点的存储地址相连续

3.将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为(  )

  A.O

(1)        B.O(n)    C.O(m)    D.O(m+n)

4.由两个栈共享一个向量空间的好处是:

(  )

  A.减少存取时间,降低下溢发生的机率

  B.节省存储空间,降低上溢发生的机率

  C.减少存取时间,降低上溢发生的机率

  D.节省存储空间,降低下溢发生的机率

5.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为(  )

  A.front=front+1                B.front=(front+1)%(m-1)

  C.front=(front-1)%m            D.front=(front+1)%m

6.如下陈述中正确的是(    )

  A.串是一种特殊的线性表        B.串的长度必须大于零

  C.串中元素只能是字母          D.空串就是空白串

7.若目标串的长度为n,模式串的长度为[n/3],则执行模式匹配算法时,在最坏情况下的时间复杂度是(    )

  A.O()    B.O(n)      C.O(n2)    D.O(n3)

8.一个非空广义表的表头(    )

  A.不可能是子表                B.只能是子表

  C.只能是原子                  D.可以是子表或原子

9.假设以带行表的三元组表表示稀疏矩阵,则和下列行表

02335

  对应的稀疏矩阵是(      )

10.在一棵度为3的树中,度为3的结点个数为2,度为2的结点个数为1,则度为0的结点个数为(    )

    A.4          B.5            C.6          D.7

11.在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为(    )

    A.e          B.2e          C.n2-e      D.n2-2e

12.假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是(    )

    A.O(n)        B.O(e)        C.O(n+e)    D.O(n*e)

13.用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况如下:

        20,15,21,25,47,27,68,35,84

        15,20,21,25,35,27,47,68,84

        15,20,21,25,27,35,47,68,84

    则所采用的排序方法是(  )

    A.选择排序    B.希尔排序    C.归并排序    D.快速排序

14.适于对动态查找表进行高效率查找的组织结构是(  )

A.有序表      B.分块有序表  C.三叉排序树  D.线性链表

15.不定长文件是指(  )

A.文件的长度不固定            B.记录的长度不固定

C.字段的长度不固定            D.关键字项的长度不固定

二、填空题

16.数据的逻辑结构是从逻辑关系上描述数据,它与数据的_____无关,是独立于计算机的。

17.在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head=_____。

18.栈顶的位置是随着_____操作而变化的。

19.在串S=“structure”中,以t为首字符的子串有_____个。

20.假设一个9阶的上三角矩阵A按列优先顺序压缩存储在一维数组B中,其中B�存储矩阵中第1个元素a1,1,则B中存放的元素是_____。

21.已知一颗完全二叉树中共有768结点,则该树中共有_____个叶子结点。

  

22.已知一个图的广度优先生成树如右图所示,则与此相应的广度优先遍历序列为_____。

23.在单链表上难以实现的排序方法有_____和_____ 。

                  

24.在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为_____。

                                                    

25.多重表文件和倒排文件都归属于_____文件。

                    

三、解答题

26.画出下列广义表的共享结构图形表示

          P=(((z),(x,y)),((x,y),x),(z))

27.线性表的顺序存储表示和链式存储表示的特点比较。

28.已知一个无向图的顶点集为{a,b,c,d,e},其邻接矩阵如下所示

a

b  

c

d

e

    

(1)画出该图的图形;

  

(2)根据邻接矩阵从顶点a出发进行深度优先遍历和广度优先遍历,写出相应的遍历序列。

29.已知一个散列表如下图所示:

3520334859

      0  1    2    3    4  5    6    7  8  9    10  11  12

其散列函数为h(key)=key%13,处理冲突的方法为双重散列法,探查序列为:

      hi=(h(key)+*h1(key))%m    =0,1,…,m-1

其中

    h1(key)=key%11+1

回答下列问题:

(1)对表中关键字35,20,33和48进行查找时,所需进行的比较次数各为多少?

(2)该散列表在等概率查找时查找成功的平均查找长度为多少?

四、算法阅读题

30.下列算法的功能是比较两个链串的大小,其返回值为:

              comstr(s1,s2)=    

请在空白处填入适当的内容。

intcomstr(LinkStrings1,LinkStrings2)

{//s1和s2为两个链串的头指针

  while(s1&&s2){

      if(s1->datedate)return-1;

      if(s1->date>s2->date)return1;

          ①    ;

          ②    ;

      }    

      if(  ③  )return-1;

      if(  ④  )return1;

            ⑤  ;

    }

31.阅读下面的算法

      LinkListmynote(LinkListL)

      {//L是不带头结点的单链表的头指针

            if(L&&L->next){

                  q=L;L=L->next;p=L;

        S1:

      while(p->next)p=p->next;

        S2:

      p->next=q;q->next=NULL;

              }

              return  L;

            }

    请回答下列问题:

  

(1)说明语句S1的功能;

    

(2)说明语句组S2的功能;

      (3)设链表表示的线性表为(a1,a2,…,an),写出算法执行后的返回值所表示的线性表。

32.假设两个队列共享一个循环向量空间(参见右下图),

    其类型Queue2定义如下:

    typedefstruct{

            DateTypedata[MaxSize];

            intfront_,rear_;

  }Queue2;

对于i=0或1,front[i]和rear[i]分别为第i个队列的头指针和尾指针。

请对以下算法填空,实现第i个队列的入队操作。

        intEnQueue(Queue2*Q,inti,DateTypex)

        {//若第i个队列不满,则元素x入队列,并返回1;否则返回0

            if(i<0||i>1)return0;

            if(Q->rear[i]==Q->front[  ①    ]return0;

            Q->data[  ②    ]=x;

            Q->rear[i]=[  ③  ];

          return1;

          )        

  ①

  ②

  ③

33.已知二叉树的存储结构为二叉链表,阅读下面算法。

      typedefstructnode{

        DateTypedata;

        Structnode*next;

      }ListNode;

      typedefListNode*LinkList;

      LinkListLeafhead=NULL;

      VoidInorder(BinTreeT)

        {

            LinkLists;

            If(T){

 Inorder(T->lchild);

                If((!

T->lchild)&&(!

T->rchild)){

                    s=(ListNode*)malloc(sizeof(ListNode));

                    s->data=T->data;

                    s->next=Leafhead;

                    Leafhead=s;

                    }

                  Inorder(T->rchild);

                }

            }

  对于如下所示的二叉树

                          

(1)画出执行上述算法后所建立的结构;

  

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

五、算法设计题

34.阅读下列函数arrange()

    intarrange(inta&#;,int1,inth,intx)

{//1和h分别为数据区的下界和上界

    inti,j,t;

    i=1;j=h;

      while(i

        while(i=x)j--;

        while(i=x)i++;

        if(i

          {  t=a[j];a[j]=a[i];a[i]=t;}

      }

        if(a[i]

        else  returni-1;

      }

(1)写出该函数的功能;

(2)写一个调用上述函数实现下列功能的算法:

对一整型数组b[n]中的元素进行重新排列,将所有负数均调整到数组的低下标端,将所有正数均调整到数组的高下标端,若有零值,则置于两者之间,并返回数组中零元素的个数。

数据结构复习题参考答案

一、单项选择题

    1.D2.B3.C4.B5.D6.A7.C8,D9,A10.C11.D12.C13.D14.C15.B

二、填空题

16.存储(或存储结构)

17.p->next->next

18.进栈和退栈

19.12

20.a4,8

21.384

22.abefcdg

23.快速排序、堆排序、希尔排序

24.2

25.多关键字

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1