数据结构实验
安和橋北
我不怕千万人阻挡,只怕自己投降
展开
-
利用二叉树的前中序遍历序列再次创建二叉树
当时学习数据结构的时候,只是知道如何根据前中序列、后中序列或者层次遍历和中序遍历序列来人工画出一颗二叉树,但是并没有用代码去实现这个过程。接下来介绍这个代码的思想,先放出全部的代码。思路分析利用前中序遍历序列来创建二叉树,重点肯定是放在两个序列上。前序序列是用来找根节点的,根节点都在前序序列的前部分。中序序列是用来根据前面找到的根节点来划分左右子树的。所以我们可以通过下标low和high来对两个序列的左右部分进行划分,从而用递归的方法构建出整个二叉树。第一个for循环,是确定根节点在中序序列的位置,然后原创 2022-06-07 18:19:34 · 158 阅读 · 0 评论 -
对于给定的序列实现直接插入、折半插入、冒泡、希尔、快速、选择、堆排序
1.本代码一共实现7种常见排序,其中直接插入排序和折半插入排序思想相同,只不过在寻找插入位置的时候,折半插入排序采用了二分法,在这一步上较直接插入排序更快。2.冒泡排序很简单,但是可以进阶一步,在内层循环 j 中加一个flag标识,判断在这一次循环中有没有发生值交换。如果发生了,那么flag的值变化。如果没发生,就直接break循环,节省时间提高效率。3.希尔排序属于高级排序方法,采用的是缩小增量的思想。在开始正式的排序之前(这个正式的排序可以理解为直接插入排序),先对序列中的一小部分进行排序,这个原创 2021-12-12 23:24:52 · 2613 阅读 · 0 评论 -
二叉排序树的创建以及在此BST上的查找算法
1. 二叉排序树的数据结构本质上和普通二叉树没有区别,只不过在创建时需要额外加上一层约束条件,使结点按照“左子树的值都比根节点小,右子树的值都比根节点大”的规则来插入。2.对二叉排序树的结点插入、中序遍历、查找结点等算法都用到了递归,十分方便。唯一注意的就是在执行创建BST时,要调用插入结点的算法,不算是递归,但也和递归差不多。上代码#include <iostream>using namespace std;typedef int KeyType;//二叉排序树的结构体原创 2021-12-03 13:13:41 · 502 阅读 · 0 评论 -
用邻接表表示AOV网,并判断是否是有向无环图
1. 注:本代码中的思想来源于s1mba。膜拜大神!2. 本代码在邻接矩阵的基础上创建邻接表。这样做的方便性就是,在邻接矩阵中我们可以很直观的表示出两个顶点是否相连,而且通过是不是对称矩阵的方式区分是不是有向图。这一点在创建邻接表时很重要,用 if (G.arcs[ i ][ j ] == 1)判断是不是要创建新的表结点。3. 另外,在邻接表的顶点表中外加一个入度域in也是点睛之笔,这是为了方便判断结点入度是否为0,从而决定是否入栈。4. By the way,本代码中用的是STL库中的stac原创 2021-11-26 21:30:13 · 1670 阅读 · 0 评论 -
用邻接矩阵创建无向图,利用DFS、BFS完成遍历,并在此基础上利用Prim算法生成最小生成树
1.用邻接矩阵表示无向图更方便,之后在遍历和生成最小生成树时需要不断访问2.好好理解Prim算法中的lowcost[ ]数组和adjver[ ]数组,虽然adjver[ ] 数组在Prim算法中没什么用3.Prim的主要思想映射到lowcost[ ]中就是,lowcost[ i ]相当于G.arcs[ i ][ ],随着不断地迭代,这个i值也会发生改变。当lowcost[ i ] == 0时,就意味着i这个点已经加入到了最小生成树的点集合U中。但是最坑爹的一点就是,前面你把lowcost[原创 2021-11-26 11:22:18 · 1036 阅读 · 0 评论 -
用广义表形式创建二叉树,并实现先(递归)中后(非递归)序遍历、求树的深度(递归)
1.利用广义表的形式创建二叉树的思想和用栈实现算术表达式求值的思想异曲同工,建议同时掌握正常的二叉树创建方法2.递归的代码比较好写,但是效率不高。本代码中的后序遍历是逆后序的思想(具体可查阅),通过将前序遍历的顺序调换,然后把结果逆序输出即可得到后序遍历的结果。#include <iostream>using namespace std;#define MAXSIZE 100#define OK 1#define ERROR 0typedef int Status;t.原创 2021-11-15 15:59:32 · 1578 阅读 · 0 评论 -
HuffmanTree的创建、编码、解码操作
#include <iostream>#include <cstdlib>#include <cstring>#pragma warning(disable:4996) //忽略strcpy的错误using namespace std;typedef struct HTNode { char c; //存储的字符 int weight; //权值 int parent, lchild, rchild; //双亲序号 左孩子和右孩子序号}HTNode,.原创 2021-11-15 15:46:47 · 1183 阅读 · 0 评论