【数据结构】复习题(二)

Hello!大家好,这一篇数据结构复习题是我上个学期复习的时候写的(刚刚在草稿箱发现了!)有一些题目过程都是配了图片的,希望对正在复习数据结构的宝宝们有帮助哦!(还有一个数据结构复习题(一)可以去我的数据结构专栏中找一下!)

一、选择题

  1. 数据的最小单位是()。
    (A)数据项

    (B)数据类型

    (C)数据元素

    (D)数据变量

  2. 设一组初始记录关键字序列为(50,40,95,20,15,70,60,45),则以增量d=4的一趟希尔排序结束后前4条记录关键字为()。

    (A)40,50,20,95
    (B)15,40,60,20

    ©15,20,40,45

    (D)45,40,15,20

  3. 设一组初始记录关键字序列为(25,50,15,35,80,85,20,40,36,70),其中含有5个长度为2的有序表,则用归并排序的方法对该记录关键字序列进行一趟归并排序后的结果为()。
    (A)15,25,35,50,20,40,80,85,36,70

    (B)15,25,35,50,80,20,85,40,70,36

    ©15,25,35,50,80,85,20,36,40,70

    (D)15,25,35,50,80,20,36,40,70,85

    【归并排序】简要步骤

    ①开始每个数字作为一组。

    ②每次都两两进行比较,直至最后一组。

  4. 一颗完全二叉树上有1001个结点,其中叶子结点的个数为()。

    (A)250

    (B)500

    © 254

    =(D)501

    该完全二叉树的深度为10.

    且第十层上的叶子结点数:1001-511=490

    第九层上的叶子结点数:256-490/2=11

    故总的叶子结点数:501

  5. 设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为()。

    (A)O(log2n)

    (B)O(1)

    ©O(n2)
    (D)O(n)

  6. 设一棵m叉树中度数为0的结点数为No,度数为1的结点数为N1,......,度数为m的结点数为Nm,则No=()。

    A) N1+N2+...+Nm
    (B)I+N2+2N3+3N4+...+(m-1)Nm

    © N2+2N3+3N4+...+(m-1)Nm

    D)2N+3N2+...+(m+1)Nm

  7. 设有序表中有1000个元素,则用二分查找查找元素X最多需要比较()次。

    (A)25
    (B)10

    ©7

    (D)1

  8. 设连通图G中的边集E={(a,(e,d),(d,f),(f, c)}则从顶点a出发可以得到一种深度优先遍历的顶点序列为()。
    (A)abedfc

    (B)acfebd

    ©aebdfc

    (D)aedfcb

  9. 设输入序列是1、2、3、······、n,经过栈的作用后输出序列的第一个元素是n,则输出序列中第i个输出元素是()。

    (A)n-i

    (B)n-1-i
    ©n+1-i

    (D)不能确定

  10. 设一组初始记录关键字序列为(45,80,55,40,42,85),则以第一个记录关键字45为基准而得到一趟快速排序的结果是()。

    (A)40,42,45,55,80,83

    (B)42,40,45,80,85,88
    ©42,40,45,55,80,85

    (D)42,40,45,85,55,80

二、应用题

1.计算如图所示的AOE网中各顶点所表示的事件的发生时间ve(j),vl(j),各边所表示的活动的开始时间e(i),e(j) ,并找出其关键路径。

【基本步骤】

①计算事件的最早发生时间 Ve(i)

②计算事件的最晚发生时间 Vl(i)

③计算活动的最早发生时间 e(i)

④计算活动的最晚发生时间 l(i)

⑤计算活动的时间余量 l(i)-e(i)

⑥写出关键路径

如图所示:

写出图的拓扑排序,并计算事件也就是顶点的最早和最晚发生时间

(写成图表的形式 等一会算活动的最晚发生时间看着比较直观)

计算活动的最早最晚发生时间

根据时间余量 写出关键路径

三、算法设计题

1.设计判断两个二叉树是否相同的算法。

c 复制代码
typedef char datatype;
typedef struct node
{
    datatype data;
    struct node *lchild;
    struct node *rchild;
}bitree;
int judgebitree(bitree* t1,bitree *t2)
{
    if(t1==NULL && t2==NULL )
        return 1;
     else if (t1==NULL || t2==NULL)
         return 0;
     else if (t1->data!=t2->data)
         return 0;
     else
         //我觉得这个*就很妙
         return (judgebitree(t1->lchild,t2->lchild)*judgebitree(t1->rchild,t2->rchild));
}

3.非递归实现二叉树的前序遍历和中序遍历。

先定义好顺序栈。

c 复制代码
typedef struct stack
{
    bintree data[100];
    int top;
}seqstack;
 //进栈
 void push(seqstack *s,bintree t)
 {
    s->data[s->top]=t;
    s->top++;
 }
 //出栈
 bintree (seqstack *s)
 {
     if(s->top!=0)
     {
         s->top--;
         return (s->data[s->top];)
     }
     else
         return NULL;
 }

二叉树前序遍历的非递归实现

c 复制代码
//bintree是指向二叉树结点的指针
//typedef bintnode * bintree;
void preorder (bintree t)
{
    seqstack s;
    s.top=0;
    while((t) || (s.top)!=0)
    {
        if (t)
        {
            printf("%c",t->data);
            push(&s,t);
            t=t->child;
        }
        else
        {
            t=pop(&s);
            t=t->rchild;
        }
    }
}

二叉树中序遍历的非递归实现

c 复制代码
void inorder(bintree)
{
    seqstack s;
    s.top=0;
    while(t!=NULL || (s.top!=0))
    {
        if(t)
        {
            push($s,t);
            t=t->lchld;
        }
        else
        {
            t=pop(&s);
            printf("%c",t->data);
            t=t->rchild;
        }
    
    }
}
相关推荐
ChoSeitaku9 分钟前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
Fuxiao___18 分钟前
不使用递归的决策树生成算法
算法
我爱工作&工作love我23 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
白-胖-子1 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级
workflower1 小时前
数据结构练习题和答案
数据结构·算法·链表·线性回归
好睡凯1 小时前
c++写一个死锁并且自己解锁
开发语言·c++·算法
Sunyanhui11 小时前
力扣 二叉树的直径-543
算法·leetcode·职场和发展
一个不喜欢and不会代码的码农1 小时前
力扣105:从先序和中序序列构造二叉树
数据结构·算法·leetcode
前端郭德纲1 小时前
浏览器是加载ES6模块的?
javascript·算法
SoraLuna2 小时前
「Mac玩转仓颉内测版10」PTA刷题篇1 - L1-001 Hello World
算法·macos·cangjie