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

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;
        }
    
    }
}
相关推荐
抠脚学代码31 分钟前
Linux开发-->驱动开发-->字符设备驱动框架
linux·数据结构·驱动开发
报错小能手41 分钟前
C++笔记(面向对象)静态联编和动态联编
开发语言·c++·算法
WBluuue1 小时前
AtCoder Beginner Contest 430(ABCDEF)
c++·算法
小肖爱笑不爱笑1 小时前
2025/11/5 IO流(字节流、字符流、字节缓冲流、字符缓冲流) 计算机存储规则(ASCII、GBK、Unicode)
java·开发语言·算法
熬了夜的程序员1 小时前
【LeetCode】99. 恢复二叉搜索树
算法·leetcode·职场和发展
Kent_J_Truman1 小时前
LeetCode Hot100 自用
算法·leetcode·职场和发展
还是码字踏实1 小时前
算法题种类与解题思路全面指南:基于LeetCode Hot 100与牛客Top 101
算法·leetcode
Victory_orsh2 小时前
“自然搞懂”深度学习(基于Pytorch架构)——010203
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
CoovallyAIHub2 小时前
突破360°跟踪极限!OmniTrack++:全景MOT新范式,HOTA指标狂飙43%
深度学习·算法·计算机视觉
得物技术3 小时前
得物管理类目配置线上化:从业务痛点到技术实现
后端·算法·数据分析