C语言数据结构应用题

整理了一下数据结构的应用题,考试比较常见的,都是应用题,没有代码。我只是整理了一下其他博主的文章,嗯嗯嗯,方便大家查找,使用,感谢各位博主的文章,我自己的博客正在搭建,还需要一段时间。

1.二维数组元素地址的计算

例题:设有二维数组A[50][60],其元素长度为1个字节,按列优先顺序存储,首元素A[0][0]的地址为200,则元素A[10][20]的存储地址为 ( )。
A.820 B.720 C.1210 D.1410
答:按列存储的话应该是:A[10][20]前面一共有20*50+10=1010个元素,又因为每个元素占一个字节,所以A[10][20]
的存储地址为200+1010=1210(按 行相反)

2.二叉树的遍历(先,中,后)

在这里插入图片描述
先序遍历:2, 7, 2, 6, 5, 11, 5, 9, 4 顺序为:根节点->左子树->右子树
中序遍历:2, 7, 5, 6, 11, 2, 5, 4, 9 顺序为左子树->根节点->右子树
后序遍历:2, 5, 11, 6, 7, 4, 9, 5, 2 顺序为左子树->右子树->根节点
<1>已知先序遍历和中序遍历还原二叉树
思路:
1)、根据先序遍历结果确定根节点。
先序遍历的第一个节点为根节点。
2)、在中序遍历结果中找到根节点,根节点左侧的部分为左子树节点,根节点右侧的部分为右子树节点。
3)、将中序遍历的结果按根节点分为两部分,迭代的执行第一步和第二步,直到还原整个二叉树。
<2>已知后序遍历和中序遍历还原二叉树
思路:
1)、根据后序遍历结果确定根节点。
后序遍历的最后一个节点为根节点。
2)、在中序遍历结果中找到根节点,根节点左侧的部分为左子树节点,根节点右侧的部分为右子树节点。
3)、将中序遍历的结果按根节点分为两部分,迭代的执行第一步和第二步,直到还原整个二叉树
————————————————
版权声明:本文为CSDN博主「Andy是个男子名」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014709760/article/details/89111485

3.构造最小生成树(Prim和Kruskal)

Prim算法从任意一个顶点开始,每次选择一个与当前顶点集最近的一个顶点,并将两顶点之间的边加入到树中。Prim算法在找当前最近顶点时使用到了贪婪算法。
1 起初,从顶点a开始生成最小生成树
在这里插入图片描述
2 选择顶点a后,顶点啊置成visit(涂黑),计算周围与它连接的点的距离:
在这里插入图片描述
3 与之相连的点距离分别为7,6,4,选择C点距离最短,涂黑C,同时将这条边高亮加入最小生成树:
在这里插入图片描述
4 计算与a,c相连的点的距离(已经涂黑的点不计算),因为与a相连的已经计算过了,只需要计算与c相连的点,如果一个点与a,c都相连,那么它与a的距离之前已经计算过了,如果它与c的距离更近,则更新距离值,这里计算的是未涂黑的点距离涂黑的点的最近距离,很明显,b和a为7,b和c的距离为6,更新b和已访问的点集距离为6,而f,e和c的距离分别是8,9,所以还是涂黑b,高亮边bc:
在这里插入图片描述
5 接下来很明显,d距离b最短,将d涂黑,bd高亮:
在这里插入图片描述
6 f距离d为7,距离b为4,更新它的最短距离值是4,所以涂黑f,高亮bf:
在这里插入图片描述
在这里插入图片描述
Kruskal算法:首先,将每个顶点放入其自身的数据集合中。然后,按照权值的升序来选择边。当选择每条边时,判断定义边的顶点是否在不同的数据集中。如果是,将此边插入最小生成树的集合中,同时,将集合中包含每个顶点的联合体取出,如果不是,就移动到下一条边。重复这个过程直到所有的边都探查过
1.找到第二短的边,将c, d再放入同一个集合里:
在这里插入图片描述
2.找到第三短的边ab,因为a,e已经在一个集合里,再将b加入:
在这里插入图片描述
3.找到b,e,因为b,e已经同属于一个集合,连起来的话就形成环了
在这里插入图片描述
4.再找,找到bc,因为c,d是一个集合的,a,b,e是一个集合,所以再合并这两个集合
在这里插入图片描述
————————————————
版权声明:本文为CSDN博主「gettogetto」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gettogetto/article/details/53216951

4.构造哈夫曼树并求带权路径

在这里插入图片描述

它们的带权路径长度分别为:
图a: WPL=52+72+22+132=54
图b: WPL=53+23+72+131=48
可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树(也称为最优二叉树)。
————————————————
版权声明:本文为CSDN博主「薛8」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xueba8/article/details/78477892

5.排序算法排序结果(冒泡,直接选择,等等)

在这里插入图片描述
转载详情看知乎,具体不写了(里面有排序动画,一学就会)
https://www.zhihu.com/question/19830721/answer/667233164?utm_source=qq&utm_medium=social&utm_oi=1135938034209067008

6.二叉排序树和平均查找长度

Hash表的“查找成功的ASL”和“查找不成功的ASL”

ASL指的是 平均查找时间

关键字序列:(7、8、30、11、18、9、14)

散列函数:
H(Key) = (key x 3) MOD 7

装载因子:
0.7

处理冲突:线性探测再散列法

查找成功的ASL计算方法:

因为现在的数据是7个,填充因子是0.7。所以数组大小=7/0.7=10,即写出来的散列表大小为10,下标从0~9。
第一个元素7,带入散列函数,计算得0。
第二个元素8,带入散列函数,计算得3。
第三个元素30,带入散列函数,计算得6。
第四个元素11,带入散列函数,计算得5。
第五个元素18,带入散列函数,计算得5;此时和11冲突,使用线性探测法,得7。
第六个元素9,带入散列函数,计算得6;此时和30冲突,使用线性探测法,得8。
第七个元素14,带入散列函数,计算得0;此时和7冲突,使用线性探测法,得1。
在这里插入图片描述
所以查找成功的计算:
如果查找7,则需要查找1次。
如果查找8,则需要查找1次。
如果查找30,则需要查找1次。
如果查找11,则需要查找1次。
如果查找18,则需要查找3次:第一次查找地址5,第二次查找地址6,第三次查找地址7,查找成功。
如果查找9,则需要查找3次:第一次查找地址6,第二次查找地址7,第三次查找地址8,查找成功。
如果查找地址14,则需要查找2次:第一次查找地址0,第二次查找地址1,查找成功。
所以,ASL=(1+2+1+1+1+3+3)/ 7=12/ 7
————————————————
版权声明:本文为CSDN博主「关小二」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013806583/article/details/52643541

7.栈的出栈入栈操作,求栈顺序和栈顶位置

栈先进后出,就是第一个进来的时候最后一个出去,你可以把它想象成弹夹,第一个上弹夹的最后一个打出去
在这里插入图片描述
首先我们不知道栈的大小是多少,而且,进栈的过程中也可以出栈。
选项A,3先出栈,那说明1、2已经进栈了,第二个数是1,是不可能。因3出栈,后面要么2出栈,要么4进栈再出栈,所以3的后面不是2就是3,而选项A后面是1,所以A不是正确的,不符合先进出。

选项B是1先进栈再出栈,然后2、3、4进栈,再4,3,2出栈,符合先进后出

选项C 1、2、3先进栈,然后3出栈,4进栈再出栈,再2、1出栈,符合

选项D 先1、2进栈,再2出栈,然后3进栈出栈,再然后4进栈出栈,1出栈,符合
————————————————
版权声明:本文为CSDN博主「Pure_Man_Ben」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接: https://blog.csdn.net/Pure_Man_Ben/article/details/101543217

8.线性探测表构造哈希表

书P169,哪本书你们懂得,剩下看 第六题
在这里插入图片描述
在这里插入图片描述

9.链式存储地址

自己找吧,不写了

  • 10
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值