数据结构
学习不易
直到有一天,可以和你并肩站立
展开
-
数据结构(C++)八大排序统一版
#include<iostream>using namespace std;void InsertSort(int a[], int n){ for (int i = 2; i <= n; ++i) { a[0] = a[i]; int j = i - 1; while (a[0] < a[j]) { a[j + 1] = a[j]; ...原创 2019-12-22 22:22:14 · 155 阅读 · 0 评论 -
数据结构(C++)所有排序代码实现
基本思想:插入排序的主要操作是插入每次将一个待排序的记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序为止。直接插入排序数组的存储结构从1开始,保证0位置可以作为存储单元,当作中间变量与数组进行比较。for循环从 2 开始,每次 0 位置存储 a[0]=a[i] ,将 i 之前的数组插入到适当位置。for循环里 i 开始的位置之前的数组都已经是有序排列。代码...原创 2019-12-21 14:45:06 · 332 阅读 · 0 评论 -
数据结构(C++)查找的基本概念
基本概念列表:由同一类型的数据元素组成的集合。关键码:数据元素中的某个数据项,可以标识列表中的一个或一组数据元素。键值:关键码的值。主关键码:可以唯一地标识一个记录的关键码。次关键码:不能唯一地标识一个记录的关键码。查找 :在具有相同类型的记录构成的集合中找出满足给定条件的记录。查找的结果 :若在查找集合中找到了与给定值相匹配的记录,则称查找成功;否则,称查找失败。静态查找 :不涉...原创 2019-12-03 08:11:13 · 197 阅读 · 0 评论 -
数据结构(C++)AOE求关键路径
本文2019/12/3上午发,只做排版需要,后续补充原创 2019-12-03 08:06:47 · 1998 阅读 · 2 评论 -
数据结构(C++)AOV网与拓扑排序
AOV网:在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,称这样的有向图为顶点表示活动的网,简称AOV网。AOV网特点:1.AOV网中的弧表示活动之间存在的某种制约关系。2.AOV网中不能出现回路。拓扑序列:设G = (V,E)是一个具有n个顶点的有向图,V中的顶点序列v1, v2, …, vn称为一个拓扑序列,当且仅当满足下列条件:若从顶点vi到vj有一条路径,则...原创 2019-12-01 22:38:57 · 839 阅读 · 0 评论 -
数据结构(C++)Floyd算法
Floyd算法的实现代码相对于Dijkstra算法更为简单和方便,但是其思想还是比较麻烦的,刚开始理解起来比较困难,就直接开始写了代码,但是对于求解路径的时候发现,如果没有理解内部思想,在做一些小改变的时候还是不太好做的。Floyd算法的基本思想如下:设图 G 用邻接矩阵法表示,求图 G 中任意一对顶点vi、 vj间的最短路径。(1) 将vi到vj 的最短的路径长度初始化为(vi, vj)...原创 2019-11-30 09:46:40 · 533 阅读 · 0 评论 -
数据结构(C++)Dijkstra算法
#include<iostream>using namespace std;const int MaxSize = 20;const int INF = 9999;int dis[MaxSize];int visited[MaxSize];int path[MaxSize];class MGraph{ int arcNum; int vertexNum; int ...原创 2019-11-27 21:35:33 · 367 阅读 · 0 评论 -
数据结构(C++)Kruskal算法
#include<iostream>#include<algorithm>using namespace std;const int MaxSize = 20;const int INF = 2147483647;int Find(int parent[], int node) //并查集存在错误!!!{ int f = node; if (parent[f...原创 2019-11-26 08:16:36 · 542 阅读 · 0 评论 -
数据结构(C++)Prime算法
Prime和Kruskal两种算法是求图最小生成树的两种算法,Prime是找点,Kruskal是找边,各有各的有点,也其实都有点小难。最小生成树的点数等于原先图的点数,边数等于点数-1 。使用邻接矩阵,关于图的数组存储之前就已经写过了点击这里图数组存储的构造函数依然保持着自己的习惯,每个顶点都从1开始计算,不从0,方便输入。比之前的构造函数增加了边权,如果没有赋权则为INF(无穷大)。...原创 2019-11-21 17:52:12 · 5182 阅读 · 1 评论 -
数据结构(C++)图的链式存储、链式深搜广搜
上午上课写好了链式存储的全部代码,但是运行的时候一直出现了指针错误,最后发现在图定义里的变量一直写混了,由于链式图存储需要定义两个结构体,是镶嵌的。在图的类中会定一个结构体数组,出错率特别高。自己也一直很不喜欢数组从0开始,因为输入边的时候都要-1,所以也对代码做了调整,可以直接进行输入。全局变量、结构体vertex:数据域,存放顶点信息。firstedge:指针域,指向边表中第一个结点。...原创 2019-11-19 15:06:59 · 266 阅读 · 1 评论 -
数据结构(C++)图的数组存储、深度优先搜索(DFS)、广度优先搜索(BFS)
图的特点:顶点之间的关系是m:n,即任何两个顶点之间都可能存在关系(边),无法通过存储位置表示这种任意的逻辑关系,所以,图无法采用顺序存储结构。所以为了图的存储我们采用的是一个一维数组来存储每个顶点的信息。用一个二维数组(邻接矩阵)存储各顶点之间的邻接关系。如果arc[i][j]==1则 i 与 j 之间一定有一条边相连。根据我们对于图的定义,我们通常使用简单无向图来表示,所以我们定义的图...原创 2019-11-18 22:41:06 · 917 阅读 · 1 评论 -
数据结构(C++)图的基本术语
今天学到图的算法了,但是树还是想好好看一些比较难的算法,因为数据结构中二叉树是非常重要的,不过自己对于期末考试里考的都是非常有信心了。所以为了赶上老师的进度就开始图的学习,图基本上后面的算法代码实现还是有点难度的,所以更要好好看看了,基本上二叉树也要偶尔看看,前几天手写了几遍单链表发现有点生疏,还是要多多加强啊。图的基本术语简单图:在图中,若不存在顶点到其自身的边,且同一条边不重复出现。邻接...原创 2019-11-18 21:15:20 · 197 阅读 · 0 评论 -
数据结构(C++)二叉树结点数、叶子节点数、高度、交换左右子树相关代码实现
二叉树不管是求点数、叶子节点数、高度,或者交换左右子树,都离不开递归的思想,由于是左右子树,所以递归在二叉树中有着非常好的应用。结点数如果结点为空,则非有效结点,直接return。如果不是空,则+1的基础上,计算由此结点开始的左右子树的结点数,最后返回。int Count(BiNode* root) { int number = 0; if (root == NULL) nu...原创 2019-11-14 13:33:36 · 2061 阅读 · 1 评论 -
数据结构(C++)二叉树前序中序后序遍历(非递归)
二叉树的建立与之前的相同,就不多做阐述。非递归的前序中序遍历,主要思想就是把二叉树上的每一个结点进行入栈操作,然后输出结点的值,出栈。但在其中前序和中序的顺序不一样,但大体的思路是相同的。二叉树的非递归后序遍历有点麻烦,就分开来写了。#include<iostream>#include<stack>using namespace std;struct BiNode...原创 2019-11-13 16:15:33 · 404 阅读 · 0 评论 -
数据结构(C++)二叉树遍历,输入前序中序推后序
1:二叉树的遍历问题总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB描述输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。输入输入文件为tree.in,共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。输出输出文件为tree.out,仅一行,表示树的后序遍历序列。样例输入a...原创 2019-11-08 21:25:07 · 1546 阅读 · 0 评论 -
数据结构(C++)二叉树的创建,前序中序后序遍历(递归版)
可以说数据结构里最重要的就是二叉树了,一点也不敢马虎,只能仔仔细细的看一遍课件,争取在讲图之前,把二叉树的openjudge做完,看完课件,做完书,还有实现一边树里的全部代码。二叉树的创建使用的是前序遍历创建的方法,使用#号标记空指针代码:BiNode<T>* Creat() { BiNode<T>* root; char ch; cin >&g...原创 2019-11-07 12:57:07 · 777 阅读 · 0 评论 -
数据结构(C++)树的基础
树的逻辑结构树的定义树:n(n≥0)个结点的有限集合。当n=0时,称为空树;任意一棵非空树满足以下条件:⑴ 有且仅有一个特定的称为根的结点;⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。树的定义采用递归方法树的基本属于结点的度:结点所拥有的子树的个数。树的度:树中各结点度...原创 2019-10-29 16:33:49 · 203 阅读 · 0 评论 -
数据结构(C++)矩阵的压缩
首先引入两个概念:特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。稀疏矩阵:矩阵中有很多零元素。压缩存储的基本思想是:⑴ 为多个值相同的元素只分配一个存储空间;⑵ 对零元素不分配存储空间。特殊矩阵的压缩存储——对称矩阵在对角线的两边,aij==aji,这里出现了不必要的多于存储,所以我们对其进行矩阵的压缩。这里只演示二维数组从0,0开始的这分别是我们的二维数据中的...原创 2019-10-20 23:37:02 · 3847 阅读 · 0 评论 -
数据结构(C++)KMP算法
周一学了KMP算法,这几天一直都搞不懂为什么,所以准备好好整理一下KMP的门道。KMP算法就是两个字符串在匹配过程中,子串在主串中第一次出现的位置,之前的BF算法是i、j每次都在两个字符串中遍历,若发生错误,i每次回溯到i+1的位置,j回溯到0,这样理解是非常简单的,时间复杂度是O(M*N),为了对字符串匹配问题进行优化,所以出现了KMP算法,KMP算法的时间复杂度是O(M+N),节省了很多的时间...原创 2019-10-17 17:09:45 · 621 阅读 · 0 评论 -
数据结构(C++)队列的顺序、链式存储结构
#include<iostream>using namespace std;const int maxsize=200;template<class T>class queue{private: T data[maxsize]; int front,rear;public: queue() { front=0;...原创 2019-10-16 16:30:18 · 265 阅读 · 0 评论 -
数据结构(C++)链栈:栈的链接存储结构
#include<iostream>using namespace std;template <class T>struct Node{ T data; Node<T>*next;}template <class T>class LinkStack{private: Node<T> *t...原创 2019-10-13 22:55:33 · 196 阅读 · 1 评论 -
数据结构(C++)顺序栈、双端顺序栈
#include<iostream>using namespace std;const int MAX_SIZE=100;template<class T>class stack{private: T data[MAX_SIZE]; int top;public: stack() { top=-1; }...原创 2019-10-08 23:14:22 · 1321 阅读 · 0 评论 -
数据结构(C++) 一元多项式求和
学习链表的结尾就是一些使用链表的基本实例,比如约瑟夫环问题等。今天做了做一元多项式求和的链表实现,其中主要的思想就是一个普通的尾插法链表,主要的区别也只是有coef和exp两个数据元素了,再有就是求和实质其实就是两个链表的相加操作。主要的思想分别有:首先确定一条主链,让主链去加第二条链,两链相加主要需要判断的就是每一项的指数大小。①如果L1的指数小于L2的指数,不需要发生变化,让主链移动到...原创 2019-09-29 01:29:46 · 8919 阅读 · 5 评论 -
有序的双链表的实现 POJ
有序的双链表的实现 POJ总时间限制: 100000ms 内存限制: 655360kB描述定义有序的双链表类,链表中存储整型数据,创建带头结点的有序双链表,要求包含以下成员函数:双链表的构造函数(非空的链表,输入数据为0,表示输入结束)插入操作(将一个数据元素插入到有序的双链表中,插入之后链表仍然有序,输入数据为0表示插入操作结束)按值删除节点(考虑有重复值的情况)双链表的遍历操作...原创 2019-09-24 09:13:59 · 281 阅读 · 0 评论 -
数据结构(C++)实现双链表
数据结构中双链表比单链表的优点更多,在单链表中,我们的Node结点有两个数据成员,分别是data数据,和next指针,这样我们可以通过后继的指针来不断获取下一个结点,从而实现链表的相关操作。而双链表的Node中,不仅有data和后继,还包括有一个last前驱,这样我们找到一个结点后,想要得到他的前驱后继都会方便很多。关于双链表结点的相关定义struct Node{ T data; ...原创 2019-09-24 08:52:20 · 926 阅读 · 0 评论 -
数据结构(C++)实现单链表
#include<iostream>using namespace std;template<class T>struct Node{ T data; Node<T>* next;};template<class T>class Linklist{ Node<T>* first;public: Linklist(...原创 2019-09-18 13:28:12 · 665 阅读 · 1 评论 -
数据结构(C++)简单顺序表
数据结构学过了模板之后就开始了线性表的学习,线性表又分为简单的顺序存储和链式存储两种方式。两种方法各有长短,根据不同的实际情况定义使用。线性表的定义:是零个或多个具有相同类型的数据元素的有限序列。通常的线性表中有两个元素,一个是存储的数据,另一个是表数据的长度。顺序存储的特点:线性表的顺序存储,是指用一维地址连续的存储单元依次存储线性表中的各个元素。设顺序表的每个元素占用c个存储单...原创 2019-09-13 21:34:32 · 1236 阅读 · 0 评论