数据结构与经典算法【完整版代码】
主要由C++写的数据结构与经典法完整版源码,内含详细的注释,简单易懂。
wardseptember
https://wardseptember.gitee.io/mynotes/#/
展开
-
各种排序算法比较
排序算法的稳定性和源码稳定性:所谓稳定性是指当待排序列中有两个或两个以上相同的关键字时,排序前和排序后这些关键字的相对位置,如果没有发生变化就是稳定的,否则就是不稳定的。 如果关键字不能重复,则排序结果是唯一的,那么选择的排序算法稳定与否就无关紧要;如果关键字可以重复,则在选择排序算法是,就要根据具体的需求来考虑选择稳定的还是不稳定的排序算法。 排序算法 源码链接 ...原创 2018-06-22 12:50:30 · 3235 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码详解【完整版代码】
Huffman Tree简介    赫夫曼树(Huffman Tree),又称最优二叉树,是一类带权路径长度最短的树。假设有n个权值{w1,w2,…,wn},如果构造一棵有n个叶子节点的二叉树,而这n个叶子节点的权值是{w1,w2,…,wn},则所构造出的带权路径长度最小的二叉树就被称为赫夫曼树。  &a原创 2018-06-17 11:42:30 · 119193 阅读 · 58 评论 -
数据结构——字符串的基本操作
/************************author's email:wardseptember@gmail.comdata:2017.12.16************************/#include<iostream>#include <stdio.h>using namespace std;typedef struct { char *ch;原创 2017-12-16 11:32:56 · 7986 阅读 · 4 评论 -
数据结构——矩阵及其常用操作
/************************author's email:wardseptember@gmail.comdate:2017.12.19************************///矩阵常用操作#include<iostream>using namespace std;#define maxSize 4void trsmat(int A[][maxSize原创 2017-12-19 13:04:47 · 3798 阅读 · 0 评论 -
数据结构——稀疏矩阵三元组操作
程序测试结果为:原创 2017-12-20 12:58:33 · 2050 阅读 · 0 评论 -
数据结构——稀疏矩阵的十字链表表示方法
/************************author's email:wardseptember@gmail.com稀疏矩阵的十字链表表示方法************************/#include<iostream>using namespace std;#define maxSize 4//普通结点定义typedef struct OLNod...原创 2017-12-21 13:10:30 · 4931 阅读 · 0 评论 -
数据结构——二叉树及其基本操作
/************************author's email:wardseptember@gmail.comdate:2017.12.22************************/#includeusing namespace std;typedef struct BTNode { char data; struct BTNode *lchild; s原创 2017-12-22 13:00:50 · 1450 阅读 · 0 评论 -
数据结构——中序线索二叉树及其中序遍历
/************************author's email:wardseptember@gmail.comdate:2017.12.25中序遍历中序线索二叉树************************/#includeusing namespace std;typedef struct TBTNode{ char data; int ltag, rta原创 2017-12-25 12:50:32 · 2962 阅读 · 7 评论 -
数据结构——前序线索二叉树及其前序遍历
/************************author's email:wardseptember@gmail.comdate:2017.12.26前序线索二叉树的前序遍历***********************/#include<iostream>using namespace std;typedef struct TBTNode{ char dat...原创 2017-12-26 12:46:17 · 4886 阅读 · 2 评论 -
数据结构——顺序表及其基本操作
/************************author's email:wardseptember@gmail.comdate:2017.12.28顺序表及其基本操作************************/#include using namespace std;#define maxSize 20typedef struct { int data[maxSi原创 2017-12-28 20:33:33 · 646 阅读 · 0 评论 -
数据结构——单链表及其基本操作
/************************author's email:wardseptember@gmail.comdate:2017.12.29单链表及其基本操作************************/#include using namespace std;#define maxSize 10typedef struct LNode { int data;原创 2017-12-29 13:56:53 · 864 阅读 · 0 评论 -
数据结构——双链表及其基本操作
/************************author's email:wardseptember@gmail.comdate:2017.12.30双链表及其基本操作************************/#include using namespace std;#define maxSize 10typedef struct DLNode { int data原创 2017-12-30 10:30:41 · 964 阅读 · 0 评论 -
数据结构——顺序栈及其应用(括号匹配)
/************************author's email:wardseptember@gmail.comdate:2018.1.1顺序栈及其应用(括号匹配)************************/#include <iostream>using namespace std;#define maxSize 50typedef struct...原创 2018-01-01 11:36:09 · 3665 阅读 · 4 评论 -
顺序栈应用2(利用顺序栈将中缀式转换成前、后缀式并求值)
/* 中缀转前缀参考算法: 1)求输入串的逆序。(中缀转前缀是从右向左访问表达式) 2)检查输入的下一元素。 3)假如是操作数,把它添加到输出串中。 4)假如是闭括号,将它压栈。 5)假如是运算符, i)假如栈空,此运算符入栈。 ii)假如栈顶是闭括号,此运算符入栈。 iii)假如它的优先级高于或等于栈顶运算符,此运算符入栈。 iv)否则,栈顶运算符出栈并添加到输出串中,重复步骤5。 ...原创 2018-01-05 21:20:10 · 1229 阅读 · 0 评论 -
数据结构——链栈及其应用(括号匹配)
/************************author's email:wardseptember@gmail.comdate:2018.2.5链栈及其应用(括号匹配)************************/#include <iostream>using namespace std;#define maxSize 50typedef struct ...原创 2018-02-05 14:39:37 · 1935 阅读 · 0 评论 -
数据结构——顺序队列
版权声明:本文为博主原创文章,转载请注本文链接。 /************************author's email:wardseptember@gmail.comdate:2018.2.7顺序队************************/#include using namespace std;#define maxSize 6typed原创 2018-02-07 17:17:21 · 729 阅读 · 0 评论 -
数据结构——链式队列
版权声明:本文为博主原创文章,转载请注本文链接。 /************************author's email:wardseptember@gmail.comdate:2018.2.7链队************************/#include iostream>using namespace std;#define maxSize 6原创 2018-02-07 17:28:20 · 864 阅读 · 0 评论 -
数据结构——折半查找法
版权声明:本文为博主原创文章,转载请注本文链接。 /************************author's email:wardseptember@gmail.comdate:2018.2.7************************/#include using namespace std;#define maxSize 10int Bsea原创 2018-02-07 20:31:30 · 4775 阅读 · 0 评论 -
经典算法之堆排序
堆是一种数据结构,可以把堆看成一棵完全二叉树,这棵树满足:任何一个非叶子结点的值都不大于(或不小于)其左右孩子结点的值。若父亲大、孩子小,则这样的堆叫做大顶推;若父亲小、孩子大,则这样的堆叫做小顶堆。堆排序中最关键的操作是将序列调整为堆。整个排序的过程就是通过不断调整,完成一趟,则将根节点调整到对应的位置,直到所有关键字调整完。下面的代码以大顶堆为例。原创 2017-12-05 14:19:20 · 1632 阅读 · 0 评论 -
经典算法之冒泡排序
/************************author's email:wardseptember@gmail.comdate:2017.12.4冒泡排序************************//*冒泡排序是通过一系列的“交换”动作完成的。首先第一个关键字和第二个关键字比较,如果第一个大,则二者交换,否则不交换;然后第二个关键字和第三个关键字比较,如果第二个大,则二...原创 2017-12-04 12:58:46 · 1595 阅读 · 0 评论 -
经典算法之Prim算法
此算法为Prim算法完整版。具体prim算法分析请见 http://blog.youkuaiyun.com/yeruby/article/details/38615045/************************author's email:wardseptember@gmail.comdate:2017.11************************/#include<iostrea原创 2017-12-03 21:45:03 · 2826 阅读 · 0 评论 -
经典算法之二路归并排序
/************************author's email:wardseptember@gmail.comdate:2017.12.5二路归并排序************************//* 二路归并排序是先将整个序列分为两半,对每一半分别归并排序,将得到两个有序序列,然后将这两个序列归并成一个序列即可。*/#include<iostr...原创 2017-12-06 12:55:18 · 4279 阅读 · 0 评论 -
经典算法之基数排序两种实现
/************************author's email:wardseptember@gmail.comdate:2017.12.7基数排序两种实现方法************************/#include <iostream>#include<math.h>#define maxSize 10using namespace...原创 2017-12-07 12:37:22 · 2297 阅读 · 1 评论 -
经典算法之快速排序
/************************author's email:wardseptember@gmail.comdate:2017.12.8快速排序************************//*每一趟选择当前所有子序列中的一个关键字(通常是第一个)作为枢轴,将子序列中比枢轴小的移到枢轴前边,比枢轴大的移到枢轴后边;当本躺所有子序列都被枢轴以上述规则划分完毕后...原创 2017-12-08 13:22:23 · 1508 阅读 · 0 评论 -
经典算法之折半插入排序
/************************author's email:wardseptember@gmail.comdate:2017.12.10折半插入排序************************//*折半插入排序与直接插入排序算法思想类似,区别是查找插入位置的方法不同,折半插入排序是采用折半查找的方法来查找插入位置的。*/#include<iostr...原创 2017-12-10 12:41:40 · 3466 阅读 · 0 评论 -
经典算法之直接插入排序及其优化
/************************author's email:wardseptember@gmail.comdate:2017.12.9直接插入排序************************//*每一趟将一个待排序的关键字按照其值得大小插入到已经排序好的部分有序序列的适当位置上,直到所有待排序关键字都被插入到有序序列中为止。第一趟,把第一个关键字看做有序列的...原创 2017-12-09 11:22:40 · 2254 阅读 · 0 评论 -
经典算法之Shell排序及其优化
希尔排序的具体分析见http://blog.youkuaiyun.com/morewindows/article/details/6668714//************************author's email:wardseptember@gmail.comdate:2017.12.11希尔排序************************/#include#define原创 2017-12-11 12:56:04 · 1630 阅读 · 0 评论 -
经典算法之简单选择排序
选择类排序的主要动作是“选择”,简单选择排序采用最简单的选择方式,从头到尾顺序扫描序列,找出最小的关键字,和第一个关键字交换,接着从剩下的关键字中继续这种选择和排序,最终使序列有序原创 2017-12-12 13:12:12 · 1511 阅读 · 0 评论 -
经典算法之Kruskal算法
每次找出候选边中权值最小的边,就将该边并入生成树中。重复此过程直到所有边都被检测完。Kruskal算法的关键在于找出最小边和判断此最小边并入树是否形成回路。原创 2017-12-13 13:11:23 · 2054 阅读 · 0 评论 -
经典算法之图的广度优先搜索遍历
图的广度优先搜索遍历(BFS)类似于树的程序遍历。它的基本思想是:首先访问起始顶点v,然后选取与v邻接的全部顶点w1...wn进行访问,再依次访问与w1,....,wn邻接的全部顶点(已经访问过的除外),以此类推,直到所有顶点都被访问完。原创 2017-12-14 12:50:04 · 2829 阅读 · 0 评论 -
经典算法之图的深度优先搜索遍历
图的深度优先搜索遍历类似于二叉树的先序遍历。它的基本思想是:首先访问出发点v,并将其标记为已访问过;然后选取与v邻接的未被访问的任意一个顶点w,并访问它;再选取与w邻接的为被访问的任一顶点并访问,以此重复进行。当一个顶点所有的邻接顶点都被访问过时,则依次退回到最近被访问过的顶点,若该顶点还有其他邻接顶点未被访问,则从这些未被访问的顶点中去一个并重复上述访问过程,直至图中所有顶点都被访问过为止。原创 2017-12-15 12:34:37 · 2481 阅读 · 0 评论 -
经典算法之暴力匹配算法(字符串)
对于一个串中的某子串的定位操作称为串的模式匹配,其中待定位的子串称为模式串。算法的基本思想:从主串的第一个位置起和模式串的第一个字符开始比较,如果相等,则继续逐一比较后续字符;否则从主串的第二个字符开始,再重新用上一步的方法与模式串做比较,以此类推,直到比较完模式串中的所有字符。若匹配成功,则返回模式串在主串中的位置;若匹配不成功,则返回一个可区别与主串的位置标记,如“-1”。原创 2017-12-17 14:01:05 · 5032 阅读 · 0 评论 -
经典算法之KMP算法及其优化
KMP算法的具体分析见http://blog.youkuaiyun.com/wardseptember/article/details/78801491//************************author's email:wardseptember@gmail.comdate:2017.12.18KMP算法************************/#include<iostream原创 2017-12-18 12:28:39 · 2324 阅读 · 1 评论 -
经典算法之层序遍历二叉树
#include<iostream>using namespace std; #define maxSize 100 typedef struct BTNode { char data; struct BTNode *lchild; struct BTNode *rchild; }BTNode, *BTree; BTree creatT...原创 2017-12-23 12:51:59 · 1649 阅读 · 0 评论 -
经典算法之非递归算法实现二叉树前、中、后序遍历
/************************author's email:wardseptember@gmail.comdate:2017.12.24非递归算法实现二叉树前、中、后序遍历************************/#include<iostream>using namespace std;#define maxsize 100typedef...原创 2017-12-24 10:35:19 · 2065 阅读 · 0 评论 -
经典算法之两个有序单链表合并
/************************author's email:wardseptember@gmail.comdate:2017.12.31单链表应用************************//*A和B是两个单链表(带表头结点),其中元素递增有序。设计一个算法,将A和B归成一个按元素值非递减有序的链表C,C由A和B中的结点组成。*/#include &l...原创 2017-12-31 17:51:17 · 7560 阅读 · 0 评论 -
经典算法之Dijkstra算法(求图中任意一对顶点间的最短路径)
/************************author's email:wardseptember@gmail.comdate:2018.1.30************************//*迪杰斯特拉算法思想: 设有两个顶点集合S和T,集合S中存放图中已找到最短路径的顶点,集合T存放图中剩余顶点,初始状态时 集合S中只包含源点v0,然后不断从集合T中选取到顶点v0...原创 2018-01-30 16:41:42 · 14852 阅读 · 0 评论 -
经典算法之Floyd算法(求图中任意一对顶点间的最短路径)
/************************author's email:wardseptember@gmail.comdate:2018.1.30************************//*佛洛伊德算法思想: 1)设置两个矩阵A和Path,初始时将图的邻接矩阵赋值给A,将矩阵Path中元素全部设置为-1 2)以顶点k为中间顶点,k取0——n-1(n为图中顶点个位)...原创 2018-01-30 16:47:21 · 5157 阅读 · 0 评论