
数据结构
无忧无虑的兔兔
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
根据中序和后序还原二叉树(数组)
#include<iostream> using namespace std; int tree[20]; int in_tree[20]; int post_tree[20]; class Btree { public: int value; Btree *lchild; Btree *rchild; }; Btree * Created(int in_b,int in_e,...原创 2018-12-08 17:05:33 · 403 阅读 · 0 评论 -
八皇后
#include<iostream> using namespace std; int mark_line[10]; int sum=0; int N; bool can(int x,int y) { for(int i=1;i<x;i++) { if( y ==mark_line[i] ) return false; if( (x-i) == (y-...原创 2019-01-26 07:31:59 · 128 阅读 · 0 评论 -
快速排序
#include<iostream> using namespace std; void swap(int array[],int a,int b) { int t; t=array[a]; array[a]=array[b]; array[b]=t; } int partition(int array[],int left,int right) { ...原创 2018-12-09 14:45:31 · 139 阅读 · 0 评论 -
堆排序
简介 堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。时间复杂度是O(n*logn)的,如果有10亿条数据,假设计算机每秒进行运算10亿次,冒泡法需要30年,而堆排序30s就可以完成。 #include&lt;iostream&gt; using namespace ...原创 2018-12-06 20:07:39 · 138 阅读 · 0 评论 -
归并排序
#include<iostream> using namespace std; const int N = 6; void merge(int array[],int left,int right,int mid) { int temp[N]; int i,j,index1,index2; for(j=left;j<=right;j++) temp[j] = arra...原创 2018-12-13 20:19:36 · 155 阅读 · 0 评论 -
拓扑排序(队列实现)
什么是拓扑排序呢?就是将一个有向无环图中所有顶点在不违反先决条件关系的前提下排成线性序列的过程称为拓扑排序。 学拓扑排序有什么用呢?当然有用啦~。比如说学校排课的时候,会考虑到有的课程需要先修。我们学完C程序设计这门课,有了编程基础,然后才能学习数据结构。大学要修很多门课程的,人为的去排课很头痛的,这时候就可以用拓扑排序解决这个问题。 拓扑排序只针对有向无环图(DAG),有两种方法可以实现,一种是...原创 2018-11-19 11:48:24 · 4887 阅读 · 0 评论 -
拓扑排序(深搜实现)
这里给大家介绍另外一种拓扑排序,这种是基于深搜实现的。 上图: 如果我们按照节点编号顺序从节点0开始深度优先搜索,就会得到下面这个序列。 5,6,3,2,8,7,0,4,1 把这个序列逆置一下,就会发现这是一个正确的拓扑序列。(可以好好想一下这个结论,我当时想了很久) 1,4,0,7,8,2,3,6,5 贴代码 #include&amp;amp;lt;vector&amp;amp;gt; #include&amp;amp;lt;iostre原创 2018-11-19 13:05:36 · 1486 阅读 · 2 评论 -
打印树
在学习二叉树时,是不是感觉很抽象,其实我们可以写个程序将二叉树打印在屏幕上。 void print(BTree *root,int h) { if(root!=NULL) { print(root-&amp;gt;rchild,h+1); for(int i=0;i&amp;lt;h;i++) cout&amp;lt;&amp;lt;&quot; &quot;;原创 2018-11-19 20:27:31 · 1100 阅读 · 0 评论 -
二叉搜索树
1.什么是二叉搜索树 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树), 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 2.为啥要学二叉搜索树呢? 大家都对二分查找有一定的了解吧。里面每一个元素是有序的,查找的时间复杂度是O(log(n))的。效率...原创 2018-11-19 21:56:29 · 155 阅读 · 0 评论 -
堆与优先队列
1.堆的性质 (1)完全二叉树的层次序列,可以用数组表示 (2)堆中储存的数是局部有序的,堆不唯一 PS:节点的值与其孩子的值之间存在限制,任何一个节点与其兄弟之间都没有直接的限制。 (3)从逻辑角度看,堆实际上是一种树形结构 (4)堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左子节点和右子节点的值。 2.堆和优先队列的关系 堆可以用于实现优先队列 3.堆的实现 ...原创 2018-11-21 21:06:08 · 460 阅读 · 0 评论 -
Dijkstra算法
1.Dijkstra算法介绍 是解决从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 ...原创 2018-11-24 20:13:12 · 242 阅读 · 0 评论 -
根据中序和后序还原二叉树
程序是替人工作的,首先自己要知道怎么还原树,才能交给计算机处理。所以可以自己手动还原一下。 #include&amp;amp;lt;iostream&amp;amp;gt; #include&amp;amp;lt;string&amp;amp;gt; using namespace std; class BTree { public: char value; BTree *lchild; BTree *rchild;原创 2018-12-03 21:36:01 · 1008 阅读 · 0 评论 -
最小生成树(prim算法)
1.最小生成树 图G的生成树是一颗包含G的所有顶点的树,树上所有有权值总和表示代价,那么在G的所有的生成树中代价最小的生成树称为图G的最小生成树,简称(MST). 图二就是图一的最小生成树。 2.普里姆算法(prim) prim算法和Dijkstra算法类似,也是贪心法。 1).输入:一个加权连通图,其中顶点集合为V,边集合为E; 2).初始化:Vnew = {x},其中x为集合V中的任一节点(...原创 2018-12-04 10:47:12 · 624 阅读 · 0 评论 -
二叉树的基本操作
#include<iostream> #include<algorithm> #include<queue> using namespace std; class btree { public: int value; btree *lchild; btree *rchild; }; btree * createbtree(btree * root,i...原创 2019-04-02 11:22:36 · 109 阅读 · 0 评论