2018 - 951 数据结构

题目

一、单项选择题

1.数据的基本单位是(  )。

A.数据结构      B. 数据元素

C. 数据项        D. 文件

2. 在逻辑上可以把数据结构分成(  )。

A. 动态结构和静态结构

B. 紧凑结构和非紧凑结构

C. 内部结构和外部结构

D.线性结构和非线性结构

3.不带头结点的单链表 head为空的判定条件是(  )。

A. head=NULL                              B. head->next=NULL

C. head->next=head                     D. head!=NULL

4.在一个单链表中, 若要在指针p所指结点之后插入指针s所指结点, 则执行

A. s->next=p;p->next=s;                   B. s->next=p->next;p->next=s;

C. s->next=p->next;p=s;                   D. p->next=s;s->next=p;

5. 串是一种特殊的线性表, 其特殊性体现在(  )。

A.可以顺序存储                          B. 数据元素是一个字符

C. 可以连接存储                         D. 数据元素可以是多个字符

6.二维数组M的成员是6个字符(每个字符占一个存储单元) 组成的串,行下标i的范围从0到8,列下标j的范围从0到9,则存放M至少需要(  )个存储单元。

A.90                                 B.180

C.240                              D.540

7. 当利用大小为n的数组顺序存储一个栈时,假定用 top==n表示栈空,则向这个栈插入一个元素时,首先应执行(  ) 语句修改top指针。(top 为栈顶指针)

A. top++               B. top--               C. top=0             D. top

&设长度为 n的链队列用单循环链表表示, 若只设头指针, 则入队和出队操作的时间复杂度分别为 (  )

A. O (1) ,O (1)       B. O( 1),O( n)            C. O (n) ,O (1)         D. O (n) ,O (n)

9.任何一棵二叉树的叶子结点在前序、 中序和后序遍历序列中的相对次序(  )。

A. 不发生改变         B. 发生改变                 C. 不能确定           D. 以上都不对

10. 线索二叉链表是利用(  ) 域存储后继结点的地址。

A. Ichild    B. data    C. rchild    D. root

11.单链表中,增加头结点的目的是为了(  )。

A. 使单链表至少有一个结点                      B. 标示表结点中首结点的位置

C. 方便运算的实现                               D. 说明单链表是线性表的链式存储实现

12. 无向图G=(V,E),其中:      V={a,b,c, d,c,f},E={(a,b), (a,e), (a,c), (b,e), (c,f), (f,d), (e,d)}对该图进行深度优先遍历,得到的顶点序列正确的是()。

A. a,b,e,c,d,f      B. a,c,f,e,b,d

C. a,e,b,c,f,d      D. a, e,d,f,c,b

13.设散列表长度为m, k为关键字, 用p去除k, 将所得的余数作为k的散列地址, 即H(k)=k%p。 为了减少发生的冲突的频率, 一般取p为 (  )。

A.小于等于 m的最大偶数                    B. m

C. 大于等于 m的最小素数                   D. 小于等于 m 的最大素数

14.矩阵连乘问题可以用下列哪种方法求解(  ).

A. 贪心算法          B. 分治递归算法          C. 动态规划          D. Kruskal 算法

15.关于动态规划算法下列说法不正确的是(  )。

A.用于求解具有某种最优性质的问题

B.以自顶向下的方式计算最优值。

C. 适用于动态规划法求解的问题,经分解得到的子问题往往不是相互独立的。

D.先求解子问题,再从子问题的解得到原问题的解。

二、判断题

1.算法的时间复杂度取决于问题的规模和待处理数据的初态。

2.顺序表无需为表示结点间的逻辑关系而增加额外的存储空间。

3.对双向链表来说,结点*P的存储位置既存放在其前趋结点的后继指针域中,也存放在它的后继结点的前趋指针域中。

4.二叉树的子树没有左右次序之分。

s.树型结构中,任何结点可以有多个前驱结点和后继结点。

6.模式匹配的改进算法-KMP 算法的最大特点是指示主串的指针不需要回溯。

7.空格串是零个字符组成的串。

8 .栈底元素是不能删除的元素。

9 栈是一种对进栈、出栈操作总次数做了限制的线性表。

10.无向图的邻接矩阵是一个对角矩阵。

11.有向图的遍历不可采用广度优先搜索方法。

12.把散列地址不同的结点,争夺同一个后继散列地址的现象称为“冲突”。

13.当一个问题的所有子问题都至少需要求解一次时,动态规划算法好于备忘录算法。

14.能够用分治法求解的问题往往具有子问题重叠性质。

15.贪心算法所做的贪心选择是仅在当前状态下做出最好的选择。

三、填空题

1. 当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果,这称为算法的(  );

2. 不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为(  )存储结构。

3. 一个顺序表的第一个元素的存储地址是200,每个元素的长度是4,则第7个元素的地址是 (  )。

4.单链表表示法的基本思想是用(  )表示结点间的逻辑关系。

5.求子串在主串中首次出现的位置的运算称为(  )。

6.二维数组A 采用行序为主方式存储,其中行下标i的范围从0到10, 列下标j的范围从0到5,每个元素占4个存储单元,并且A[0][0]的存储地址是 1000, 则A[8][4]的地址是(  )。

7 已知一个栈的输入序列为1,2,3,……n,则其输出序列的第2个元素为 n的输出序列的种数是(  )。

8. 一个循环队列Q 的存储空间大小为 M, 其队头和队尾指针分别为 front 和 rear, 则循环队列中元素的个数为(  )。

9.在二叉链表中空链域有n个, 则该链表共有(  )个结点。

10. 设某二叉树中度数为 0 的结点数为 N₀,度数为 2 的结点数为 N₂,则 N₀、N₂之间关系:(  )。

11. 某二叉树的前序遍历序列是 abdgcefh,中序序列是dgbạechf,其后序序列为(  )。

12. 对于采用分块查找的数据表, 要求表是(  )。

13.索引表的索引项的一般形式是:(关键字,(  ))。

J4.贪心算法可以求解的问题应具有最优子结构和(  )的性质。

15.一个有n个顶点的无向图最多有(  )条边。

四、问题求解题

1. 在如下数组A 中链接存储了一个线性表,表头指针为 A[0]. next,试按照下面格式写出该线性表。

  A          0              1               2              3               4              5              6              7

线性表为:(                                  )

2. 对给定的一组关键字: 63, 83, 43, 22, 67, 65, 76, 54, 99, 68, 77, 14,画出应用归并排序对上述序列进行排序中各趟归并的结果。

第一趟归并后[     ][     ][     ][     ][     ][     ]

第二趟归并后[            ][                                 ][                      ] 

第二趟归并后[                                                                   ][                                 ]

第四趟归并后[                                                                                                      ]

3. 设有一组关键字序列(23,34,56,33,45,28,67,11,50,07,47)。 散列表长为 15。

(1) 请设计一个适当的散列函数(采用除留余数法);

(2) 装填因子等于多少?

(3) 画出用拉链法构造的散列表(链表中插入结点时采用头插法)。

4. 设将整数1、2、3、4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:

(1) 若入、出栈次序为 Push(1), Pop(), Push(2), Push(3), Pop(), Pop(), Push(4), Pop(),则出栈的数字序列是怎样的(这里 Push(i)表示i进栈, Pop()表示出栈) ?

(2) 能否得到出栈序列1423 和1432?并说明为什么不能得到或者如何得到。

(3) 请分析1、 2、3、4的24种排列中,那些序列是可以通过相应的入出栈操作得到的。

5. 已知一个无向图如下图所示,给出从顶点 1 出发用Prim(普里姆)算法生成所有可能的最小树的过程。

6. 输入一个正整数序列{40,28,6,72,100,3,54,1,80,91,38}, 建立一棵二义排序树,然后删除结点72, 分别画出该二叉树及删除结点72后的二叉树。

五、算法设计题

1. 假设二叉树采用二叉链表存储结构,完成一个递归实现的算法,计算一棵给定二叉树的叶子结点数。

typedef int  Elemtype;
typedef struct node{
  Elemtype  data;
  ①      //定义左右子树
}BinNode,*BinTree;

int num=0;
void CountLeaves(BinNode *p, int num){
//num is the number of leaves
    if(p!=Null){
        if((!(p->Ichild)&&!( p->rchild))
            ②  
      ③    //计算左子树叶子节点个数
      ④    //计算右子树叶子节点个数
  }
}        

 

2. (10 分)如果希望循环队列中的元素都能得到利用,则需要设置一个标志域 tag,并通过tag的值为0 和 1 来区分尾指针和头指针值相同时的队列状态是“空”还是“满”。补全下面与此结构相应的入队列和出队算法。

typedef int QElemType;    //循环对列中元素的类型

typedef struct{
    QElemType base[maxsize];
    int  front;
    int  rear;
    int  tag;
}CyQueue;

Status EnCyQueue(CyQueue *Q, int x)    //带tag域的循环对列入队算法
{
    if(Q. front == Q. rear&&Q. tag==1)    //tag域的值为0 表示“空”, 1表示“满”
        return OVERFLOW;
    Q. rear =(Q. rear+1)%MAXSIZE;
    Q. base[   ①   ]=x;
    if(    ②   )
        Q. tag=1;
}

Status DeCyQueue(CyQueue*Q, int x)  //出队算法, 出队的值赋给 x
{
    if(Q. front ==Q. rear&&Q. tag==0)
        return INFEASIBLE;
    ③    ;
    ④    ;
    if(   ⑤  )
        Q. tag=0;
}

 

3 (10分)已知有m个顶点的无向图,采用行序为主序的邻接矩阵结构存储,完成下列算法:

(1) 计算图中有多少条边。

int edges(int  *a, int m)    //a 为存储矩阵的结构
{
    int i,j;
    int e=0;
    for(i=0;i<m;i++)
        for(j=0; ① ;j++)
            if(②)
                  ③ ;
    return e;
}

 

(2) 判断第i个顶点和第个j顶点之间是否有边相连。

int isadj(int i, int j, int *a, int m)
{return     ④  ;}

 

答案

一、单项选择题

1、B  2、D 3、A  4.  B  5.  B

6、   D  7.B   8.   D  9.   A  10.C

11、 C  12.   D  13.D  14.C 15.B

二、判断题

1.✔ 2.✔ 3.  ✔   4.×5.×

6、✔ 7.×8.×9.×10.×

11.×12、×13、✔    14、×15、✔

三. 填空题

1.   健壮性

2、   链式

3.   224

4.   指针

5.模式匹配

6、   1208

7.   n-1

8.   (rear-front+M) % M

9.   n-1

10.   No=N₂+1

11.gdbehfca

12.   块内无序、块间有序

13.   地址

14.   贪心选择

15、 n(n-1)

四、问题求解题

1.

(go,   it, for,   egg,do,  and)

2.

[63, 83][22,43][65,67][54,76][68,99][14,77]

[22,43,63,83][54,65,67,76][14,68,77,99]

[22,43,54,63,65,67,76,83][14,68,77,99]

[1,22,43,54,63,65,67,68,76,77,83,99]

3.

(1) H(key)=key mod 13

(2) 11/15

(3)

4.

(1)13 24

(2) 无法得到 1423,4出栈时,2,3在栈内,3会先于2出栈,得到1432:push(1), pop(), push (2), push, 3push (4), pop( ), pop( ), pop( )

(3)
1234, 1243,1324,1342, 1432, 2134, 2143,2314, 2341, 2432, 3214, 3241, 3421, 4321

共14种

5.

五、算法

1.   

①  struct   node*Ichild,*rchild

②   num++;

③   CountLeaves(P→Lchild,   num);

④  CountLeaves(P→rchild,   num);

2.

①Q.rear

②   Q.rear==Q.front

③   x=Q.base[Q.front]

④.   Q.front=(Q.fron-l+1)%MAXSIZE

⑤   Q.rear==Q.front

3.   

①  j<i

②   a[i][j]==1

③   e++

④   a[i][j]

posted @ 2023-12-28 00:02  3cH0_Nu1L  阅读(158)  评论(0编辑  收藏  举报