数据结构
FREEstriker
这个作者很懒,什么都没留下…
展开
-
NOJ-建立二叉树的二叉链表存储结构-西工大数据结构
今天上课讲完二叉树的第一节之后,回到宿舍就把二叉树的第一道题做了。如有错误,请务必指正。 题目如下: 分析一下题目,就是用递归建立一个二叉树,在按照先序遍历输出。这里我采用的方法是每次读入两个数据,当第一个数据是字母,若第二个数据是‘(’,说明这个根有左支和右支,若第二个数据是‘,’或‘)’,说明这个节点无子支,是个叶节点。而当第一个数据是‘,’时就再读入一个数据,这个新数据若...原创 2018-04-09 20:24:29 · 1203 阅读 · 0 评论 -
NOJ-用弗洛伊德算法求赋权图的两点间的最短路径的长度-西工大数据结构
一周多没写了,今天上完课回来清两个。题目如下: 存储结构和以前的都一样,就是换成floyd算法了,其实时间复杂度和dj是一样的,用dj也差不太多。 (偷一下老师的图。。。)他就是一个起始点一列一列从上到下遍历,中点随起始点的遍历更新终点步数,终点就是起点和中点在矩阵中的交叉点,最后按需输出就可以。 以下是我的实现:#include <stdio.h>...原创 2018-05-16 18:33:45 · 2017 阅读 · 0 评论 -
NOJ-构造哈希表-西工大数据结构
今天上课讲了哈希表,回来写了一下。题目如下: 看一下题,他说用最简单的方法建一个最简单的哈希表,然后输出平均查找长度,毫无难度。。。 我哈希表用了一个struct指针,如果要存东西,就申请一个节点并把节点地址塞里面,否则就是NULL,可以节省一点空间(虽然毫无必要。。。)。 我步数在建表的时候就算完了,最后算个和就行,当然也可以单纯建表,然后查找并记录步数,再求和,其实都...原创 2018-05-21 16:57:51 · 1735 阅读 · 0 评论 -
NOJ-二叉排序树的归并-西工大数据结构
题目如下: 我就随便写了写,还用的上次的函数就可以。 以下是我的实现:#include <stdio.h>#include <stdlib.h>struct binaryTreeNode{ int num; struct binaryTreeNode *left; struct binaryTreeNode *right;...原创 2018-05-25 10:02:14 · 842 阅读 · 1 评论 -
NOJ-二叉排序树的插入和删除-西工大数据结构
周二就写完了,找bug找了很长时间,今天有空了,发出来。题目如下: 构建二叉排序树,找后继线索链表,插入都还可以,基本操作,就是这个删除比较麻烦,好多种情况,而且他居然每次都是对原二叉树进行插入删除,输出之后还得删除和插入回去,真的是闲的。 找后继采用栈的方法就可以了,插入就和查找差不多,只不过插入是找到上一节点,查找是找到查找节点,我把这两个功能集合成一个函数了,而且我觉得只...原创 2018-05-25 09:51:37 · 1212 阅读 · 0 评论 -
NOJ- 逆波兰表达式-西工大数据结构
这题想了挺长时间,刚开始用了3个栈,很复杂,最后也过了,想了想改成了两个栈,简单了许多。题目如下: 逆波兰表达式,就是抽成又向无环图的后续遍历,其中符号的优先级比较难处理,情况很多。 我的实现如下:#include <stdio.h>#include <stdlib.h>struct charStack{ union { ...原创 2018-05-20 00:55:38 · 3340 阅读 · 0 评论 -
NOJ-求赋权图中一个结点到所有结点最短路径的长度-西工大数据结构
昨天实验课写了一下,报告也已经写完交了,今天写出来。题目如下: 无非就是换了种存储结构,输出改成按节点顺序输出了,我就把上一次的代码改了一下,就通过了。 以下是我的实现:#include <stdio.h>#include <stdlib.h>struct graphList{ int vexNum; int graph[120]...原创 2018-05-05 18:47:31 · 1856 阅读 · 0 评论 -
NOJ-Dijkstra算法-西工大数据结构
前几天就讲了,考电路的前一天晚上写了一下,但是因为54的活动,今天才有空写下来。题目如下: 看一下题,就是用邻接表存一个图,然后用dj算法来求出0节点到其他节点的最短路径,最后的输出格式要求从短到长,最后输出不可到达,所以最后要排一下序。 首先创建3 3 1 2 1 1 3 4 2 3 2的邻接表如下图: dj算法其实是贪心...原创 2018-05-05 17:33:55 · 4765 阅读 · 2 评论 -
NOJ-基于图的深度优先搜索策略-西工大数据结构
昨天讲了图,睡着了,今天运动会学了一下,回来写了一道。题目如下: 看一下题目,就是用领接表构建一个图,再寻找是否有特定的路径。 邻接表也没什么好说的,每个顶点节点存储相连接的边的信息。那么3 3 1 2 3 1 2 1 3 2 1可以构建下面的图: 深度搜索中,我使用了回溯和递归,记录下已走过的顶点,避免走进死循环,若找到路径,直接返回1,否则...原创 2018-04-24 17:56:31 · 1906 阅读 · 0 评论 -
NOJ-哈夫曼编/译码器-西工大数据结构
昨天老师讲完了哈夫曼书,回到宿舍就开始写,到今天才算是通过。题目如下: 分析一下题目,首先要构建一个哈夫曼树,然后先输出编码,再根据编码进行译码并输出。 构建哈夫曼树,就是取所有数据中权重最小的两个,组成一个小树,这个小树的权重就是这两个数据权重之和,然后反复进行这个操作(已成为叶节点的数据不再进行权重比较),就可以得到一课哈夫曼书。这里并没有用二叉链表来存储,而是使用原创 2018-04-19 16:47:48 · 5221 阅读 · 3 评论 -
NOJ-基于图的广度优先搜索策略-西工大数据结构
放假前课上讲了广度搜索,这两天一直在复习电路基础,今天晚上才把这道题给写了,题目如下: 这个题就是把上一道题的深度变成广度了,输入构建图都没有变,所以我就稍微改了一下上次的代码,加了几个队列函数。 先把3 3 1 2 3 1 2 1 3 2 1构建为下面的图: 广度搜索其实是一种队列的操作,每次取队列头,把队列头边表的所有节点入队,然后把队列头...原创 2018-04-30 22:39:36 · 1498 阅读 · 0 评论 -
NOJ-稀疏矩阵的乘法-西工大数据结构
这道题也是上周就写了的,今天晚上赶紧发出来。题目如下: 看一下题目,就是三元组表稀疏矩阵的乘法,然后输出。 首先将矩阵每行的非0元个数记下来,那么矩阵每行第一个非0元在三元表的位置就是上一行非0元个数加上上一行首个非0元位置之和。这样就可以不用遍历三元表,就可以快速找到相应的三元组表元素。相乘时先将结果存入一个数组中,然后取其中非0元素存入新的三元组表。最后输出新三元组表即可。...原创 2018-04-13 00:35:12 · 2603 阅读 · 0 评论 -
NOJ-稀疏矩阵转置-西工大数据结构
上周就做完了,拖了一周今天才来写。题目如下: 看一下题目,就是创建三元组表然后转置再输出。 我采取的方法是,先得到矩阵每一列非0元的个数,那么每一列第一个元素在新的三元表中的位置就是上一列的非0元的个数加上上一列第一个元素在新三元表的位置之和。示例如下: 以下是我的实现:#include <stdio.h>#include <stdlib.h>...原创 2018-04-12 21:48:36 · 2214 阅读 · 1 评论 -
NOJ-求广义表深度-西工大数据结构
我是“计算机科学与技术”专业的一名在校本科生,这是我的第一篇博文,用词不当还请各位看官多多包涵。 这篇博文是关于西北工业大学NOJ数据结构习题中的“求广义表深度”的思路实现与调试心得,如有错误或纰漏欢迎各位大佬指正。题目如下: 读题之后,第一反应是与之前做过的一道“表达式括号匹配”题目类似,似乎可以用“栈”的方法来解决,但题目明确要求要用广义表而且老师前两天也刚刚讲过关于广义表...原创 2018-04-06 02:40:39 · 2703 阅读 · 1 评论 -
NOJ-建立二叉树的二叉链表-西工大数据结构
今天回到宿舍发现网站挂了,11点再试发现好了,赶紧做了一道。题目如下: 分析一下题目,就是用前序和中序拼一个二叉树出来,再后序输出。 创建二叉树时,前序中第一个数据肯定是根节点,然后在中序中这个数据肯定把中序序列分成左半部分和右半部分,左半部分就是这个数据节点的左支,右半部分就是右支,然后再对左支和右支创建二叉树,构成一个递归。则ABCDE BADCE,可转化成以下二叉树: ...原创 2018-04-12 00:06:21 · 1737 阅读 · 0 评论 -
NOJ-输出以二叉树表示的算数表达式-西工大数据结构
我发现这几道二叉树的题是真的像,方法都差不多,就稍微修改一下函数就能通过,真的是无力吐槽。。。。。。 下面是题目: 明明是一个前序变中序,还整得这么玄乎。。。。。。 分析一下题目,它是将一个先序的一串数据整到二叉树里,数据若是‘#’就为NULL。最后按表达式输出。 输入我决定采用递归的方法,每次读入一个数据,若是字母或符号就说明他是一个根节点,若是‘#’说明上个节点...原创 2018-04-10 22:17:27 · 862 阅读 · 0 评论 -
NOJ-计算二叉树叶子节点数目-西工大数据结构
今天晚上没啥事,洗了洗澡,吃了点东西,又写了一道,感觉和上一道比较类似。 题目如下: 分析一下题目,它是将一个先序的一串数据整到二叉树里,再找出它的叶节点有几个。 输入我决定采用递归的方法,每次读入一个数据,若是字母说明他是一个根节点,若是‘#’说明上个节点没有当前分支,返回NULL即可。由此,AB###可转换成如下二叉树: 寻找叶子节点我也选择递归的方法,如果这个...原创 2018-04-09 22:26:52 · 701 阅读 · 0 评论 -
NOJ-用迪杰特斯拉算法求赋权图中的最短路径-西工大数据结构
边看锤子的发布会边改出来的,他那发布会的演示真是尴尬死了,所以我写了个烂代码(我实在不想重写了)。。。题目如下: 还是dj算法,我就把其中的dj相关函数改了一下,记录一下stepN中到终点的距离,如果改变了,说明min就是要走的结点,如果终点被更新掉了,说明已经找到到终点的最短走法,直接跳出结束就行了。 其中改变了这几个函数,就是遍历时改为从头开始,判断输出一下就可以了:voi...原创 2018-05-16 22:16:24 · 1383 阅读 · 0 评论