数据结构实验教程-第一套

news2025/7/13 10:11:53
1.在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为1,右孩子的平衡因子为0,则应作_型调整以使其平衡。
A.LL
B.LR
C.RL
D.RR

答案为a,错选了c。
平衡因子 = 左子树高度 - 右子树高度
错因:找到了最小不平衡子树为左孩子的左子树(LL)应做右单旋转,但这个操作的名称叫LL。

LL:右单旋转
RR:左单旋转
LR:左旋转再右旋转
RL:右旋转再左旋转

线性表中每个元素都有一个前驱和一个后继元素。

这个说法是不对的,第一个元素无前驱节点,最后一个元素无后继节点。

若从某顶点出发对无向图G进行深度优先搜索遍历,所得的遍历序列唯一,则可断定图中有两个顶点的度为1。

这个说法是正确的。(就算是环,也有两种序列,因为是无向图)

广义表A=(((a,b),(c,d),e)),取出A中的原子e的操作是_

在广义表中,head取出的是表中第一个元素,tail取出的是当前表的下一个元素。
因此答案为:head ( tail ( tail ( head(A) ) ) )

解答本题时,首先要清楚取表头和表尾运算 head 和 tail运算的含义: head(A)返回A表中的第一个元素;tail(A)则返回在A表中去掉第一个元素后所得到的表。
为取出元素e,首先要将e所在的元素(子表〉取出来,即执行head(A),得到A的第一个元素((a,b).(c,d),e),由于e是其中第三个元素,故要连续去掉其前面两个元素,即执行两次取表尾元素,然后再执行取表头运算,按由里到外的次序合成得到答案。
类似地,若要取出其中的原子b,其复合函数应是head(tail(head(head(A)))).

9.在有序表A[22]中,按二分查找方法进行查找,查找值为A[15]的元素依次比较的元素的下标是

第一次 mid = (0+21)/2 = 10
第二次
low = mid+1 = 11
mid = (11+21)/2 = 16
第三次
high = mid-1 = 15
mid = (15+11)/2 = 13
第四次
low = mid + 1 = 14
mid = (14+15)/2 = 14
第五次
low = mid + 1 = 15
mid = (15+15)/2 = 15

因此搜索下标应该为 10 16 13 14 15
关键在于更新时,若low更新因为low = mid - 1 若high更新应为high = mid+1,别把+1或者-1忘了

3.已知散列表的地址空间为0~13,散列函数为H(k)=k%13,用线性探查法处理冲突。
将下列元素依次插入到初值为空的散列表中,画出该表,并求出在等概率情况下,查找成功时的平均查找长度。
( 11,22,33,57,65,31,43,98,77,100,30,28)

注意要看清是如何解决冲突的,别想当然用拉链法去解决。最终答案为2.

2.设计算法按先序次序遍历先序线索二叉树。要求采用非递归形式,且不用栈。
BiTnode *NextNode(BiTnode *p){
    if(p->ltag == 0) return p->lchild;
    //如果有左孩子,后继是其左孩子
    else return p->rchild;
    //没有左孩子的话后继是右孩子或者后继线索
}

void PreTraverse(BiTnode *t){
    BiTnode *p = t;
    //第一个节点为t
    for(;p;p = NextNode(p))
        visit(p)
}

与之相对应的是中序线索二叉树的遍历,注意进行区分。

BiTnode *FirstNode(BiTnode *t){
    //找到中序的第一个节点
    while(p->tag == 0) p = p->lchild;
    return p;
    //最左下节点
}

BiTnode *NextNode(BiTnode *t){
    //找到中序后继节点
    if(t->rtag == 1) return t->rchild;
    //右孩子是线索,直接返回
    else return FirstNode(t->rchild);
    //返回右子树的第一个节点
}

void InTraverse(BiTnode *t){
    for(BiTnode *p = FirstNode(t);p;p = NextNode(p))
        visit(p);
}

注意上述代码第一个函数中while(p->ltag == 0) p = p->lchild;这个条件可不可以替换为while(p->lchild) p = p->lchild;显然是不可以的,因为在后续调用中, p = p->lchild有可能为线索这个条件一定要注意。
在这里插入图片描述

void swap(int *a,int *b){
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}
void sort(int a[],int n){
    int low = 0,high = n-1;
    while(low<high){
        while(a[low]%3 == 0)low++;
        while(a[high]%3 != 0) high--;
        if(low<=high) swap(&a[low],&a[high]);
        else break;
    }
    high = n-1;low++;
    while(low<high){
        while(a[low]%3 == 1)low++;
        while(a[high]%3 != 1) high--;
        if(low<=high) swap(&a[low],&a[high]);
        else break;
    }
    high = n-1;low++;
    while(low<high){
        while(a[low]%3 == 2)low++;
        while(a[high]%3 != 2) high--;
        if(low<=high) swap(&a[low],&a[high]);
        else break;
    }
}
int main()
{
    int num[] = {1,3,5,7,9,2,4,6,8,10};
    for(int i=0;i<10;i++){
        printf("%4d",num[i]);
    }

    printf("\n");
    sort(num,10);
    for(int i=0;i<10;i++){
        printf("%4d",num[i]);
    }
    return 0;
}

别忘了在swap前加一个判断是否low<high

在这里插入图片描述

struct TreeNode {
     int val;
     struct TreeNode *left;
     struct TreeNode *right;
 };


struct TreeNode* Build(int *preorder,int p1,int p2,int *order,int o1,int o2){
    struct TreeNode *root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    root->val = preorder[p1];
    int mid;
    for(mid = o1;order[mid]!=root->val;mid++) ;
    int llen = mid - o1;
    int rlen = o2 - mid;
    if(llen){
        root->left = Build(preorder,p1+1,p1+llen,order,o1,o1+llen-1);
    }
    else
        root->left = NULL;
    if(rlen){
        root->right = Build(preorder,p2-rlen+1,p2,order,o2-rlen+1,o2);
    }
    else
        root->right = NULL;
    return root;
}
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
    struct TreeNode *root;
    root = Build(preorder,0,preorderSize-1,inorder,0,inorderSize-1);
    return root;
}

void traverse(struct TreeNode* t){
    if(!t) return;
    if(t->left)
        printf("( %d , %d )\n",t->val,t->left->val);
    traverse(t->left);
    traverse(t->right);

}
int main()
{
    int pre[] = {3,9,20,15,7};
    int in[] = {9,3,15,20,7};
    struct TreeNode* t = buildTree(pre,5,in,5);
    traverse(t);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

model.py篇

model.py篇 目录如下&#xff1a; 引言找LeNet5网络结构书写代码测试结果函数解释 引言 卷积主要用于特征的提取&#xff0c;而model.py则是为了从输入信息中筛选出我们需要的信息。 我们在阅读完论文后&#xff0c;对我们需要的模型进行搭建&#xff0c;下以LeNet5的model…

子域名访问计数(哈希表、字符串、索引)

力扣地址&#xff1a;力扣 网站域名 "discuss.leetcode.com" 由多个子域名组成。顶级域名为 "com" &#xff0c;二级域名为 "leetcode.com" &#xff0c;最低一级为 "discuss.leetcode.com" 。当访问域名 "discuss.leetcode.com&…

【Struts2】idea快速搭建struts2框架

文章目录什么是SSH框架&#xff1f;Struts2框架1、struts2的环境搭建1.1 创建web项目&#xff08;maven&#xff09;&#xff0c;导入struts2核心jar包1.2 配置web.xml&#xff08;过滤器&#xff09;&#xff0c;是struts2的入口&#xff0c;先进入1.3 创建核心配置文件struts…

力扣(LeetCode)13. 罗马数字转整数(C++)

模拟 罗马数字和掰手指数数的区别在于&#xff0c;IV/IXIV/IXIV/IX 这类倒着数数的&#xff0c;和阿拉伯数字最大的区别在于 555 的 10k10^k10k 倍 k∈Nk\isin Nk∈N &#xff0c;需要被表示出来。所以除了记录 I/X/C/MI/X/C/MI/X/C/M ——1/10/100/10001/10/100/10001/10/100…

五种IO模型

文章目录什么是IO操作系统的IO五种IO模型阻塞IO非阻塞IO多路转接IO(复用IO)信号驱动IO异步IO同步异步什么是IO IO,即input/output,IO模型即输入输出模型,而比较常见且听说的便是磁盘IO,网络IO. 按照冯诺依曼结构的来看,假设我们把运算器、控制器、存储器三个设备看做一个整体…

Kruskal算法求最小生成树

输入样例&#xff1a; 4 5 1 2 1 1 3 2 1 4 3 2 3 2 3 4 4输出样例&#xff1a; 6适用于稀疏图&#xff0c;快&#xff1b; 实现步骤&#xff1a; 1.将所有边将权重从小到大排序&#xff1b;sort&#xff1b;O&#xff08;mlogm&#xff09; 2.枚举每条边a,b&#xff1b;权…

RabbitMQ的 AMQP协议都是些什么内容呢

之前也讲述过关于 RabbitMQ 的相关内容&#xff0c;比如他们的配置&#xff0c;以及 RabbitMQ 整合 SpringBoot 使用&#xff0c;而且自己使用过之后&#xff0c;就会在自己的简历上面写上自己使用 RabbitMQ 实现了什么功能&#xff0c;但是这就会导致&#xff0c;有些面试官就…

QPainter、QPen 、QBrush(概念)

Qt中的三大绘画类&#xff1a; QPainter :进行绘画QPaintDevice :提供画图设备&#xff0c;是一个二维的抽象&#xff08;是所有可绘制对象的基类&#xff09;QPaintEngine :提供了画家用于绘制到不同类型的设备上的界面QPainter(画家) QPainter 提供高度优化的功能来完成 GUI …

Presto 聚合中groupBy分组的实现

一.前言 本文只要探索在Presto中groupby是怎么实现的。在Preso中&#xff0c;groupby的分组主要通过对数据Hash的数值比较进行分组&#xff0c;其中有2种情况&#xff0c;一直是仅有一个groupby字段而且字段是Bigint类型的&#xff0c;此场景下会使用BigintGroupByHash来实现分…

Spring boot使用ProGuard实现代码混淆

目录参考一、 ProGuard简介二、混淆配置要点三、快速开始方案一 配置文件新增proguard.cfg配置插件打包方案二 pom中定义配置参考 Spring boot使用ProGuard实现代码混淆 SpringBoot 玩一玩代码混淆&#xff0c;防止反编译代码泄露 代码混淆常见于安卓的apk安装文件, 服务端的…

11月千言最新评测推荐,覆盖中文对话、视频语义理解、可信AI等前沿方向

千言数据集是百度联合中国计算机学会、中国中文信息学会共同发起的数据共建计划&#xff0c;千言针对每个自然语言处理问题&#xff0c;均收集和整理多个开源数据集&#xff0c;进行统一的处理并提供统一的测评方式&#xff0c;帮助加速模型的研发。截至目前&#xff0c;千言评…

[附源码]java毕业设计上海景宏不锈钢厨房设备报修系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

云原生系列 【轻松入门容器基础操作】

✅作者简介&#xff1a; CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云 享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 最近云原生领域热火朝天&#xff0c;那么云原生是什么&#xff1f;何为云原生…

数据分析 | Pandas 200道练习题 进阶篇(3)

文章目录DA21 大佬用户成就值比例DA22 牛客网用户最高的正确率DA23 统计牛客网用户的名字长度DA24 去掉信息不全的用户DA25 修补缺失的用户数据DA26 解决牛客网用户重复的数据总结&#xff1a;❤️ 作者简介&#xff1a;大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生…

生信步骤|MAFFT结合HMMER进行多序列比对和基于隐马模型的基因搜索

蛋白质都是由相似的小型结构域组成的。如果我们有若干个已知的蛋白序列&#xff0c;那我们就可以根据这些蛋白序列比较其含有的保守域&#xff0c;寻找在蛋白数据库中上是否也有一样保守域的蛋白。而后根据统计学模型&#xff0c;将显著性较高的蛋白序列预测为同一类基因家族蛋…

Oracle SQL执行计划操作(5)——分区相关操作

5. 分区相关操作 该类操作与SQL语句执行计划中分区表操作相关。根据不同的具体SQL语句及其他相关因素&#xff0c;如下各操作可能会出现于相关SQL语句的执行计划。 1&#xff09;PARTITION RANGE ALL 对范围分区&#xff08;RANGE PARTITION&#xff09;表的所有分区进行子…

内存泄漏检测C版小工具

一 内存泄漏简介 内存泄漏&#xff08;Memory Leak&#xff09;是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放&#xff0c;造成系统内存的浪费&#xff0c;导致程序运行速度减慢甚至系统崩溃等严重后果。 内存泄漏分类&#xff1a; 1.堆内存泄漏&#xff1…

基于LMI的非线性混沌系统滑模控制

目录 前言 1.非线性系统 2.控制器设计 3.仿真分析 3.1仿真混沌系统 3.2 LMI求解反馈阵F 3.3仿真模型 ​​​​3.4仿真结果 3.5注意事项 前言 前面我们介绍了很多种滑模面设计&#xff0c;以及介绍了几篇结合LMI的滑模控制&#xff0c;其核心思想可以看作是用LMI去控制…

【python与数据分析】Numpy数值计算基础——补充

目录 二、矩阵生成与常用操作 1.生成矩阵 2.矩阵转置 3.查看矩阵特征 4.矩阵乘法 5.计算相关系数矩阵 6.计算方差、协方差、标准差 7.行列扩展 8.常用变量 9.矩阵在不同维度上的计算 10.应用 &#xff08;1&#xff09;使用蒙特卡罗方法估计圆周率的值 &#xff0…

【Transformers】第 10 章 :从零开始训练 Transformer

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…