![](https://img-blog.csdnimg.cn/20190417083537611.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构学习笔记
算法与数据结构
成龙大侠
这个作者很懒,什么都没留下…
展开
-
数据结构:线索二叉树怎么找到前驱和后继,如何遍历输出?
上一篇博客介绍了线索二叉树的构造,以及简单的递归输出方法https://blog.csdn.net/hpu2022/article/details/107234190阅读本文可以先大致了解一下上一篇文章线索二叉树定义typedef struct ThreadNode{ ElemType data; // 前驱线索->左孩子、后继线索->右孩子 struct ThreadNode *lchild, *rchild; // tag为0表示孩子,原创 2020-07-09 19:54:57 · 1790 阅读 · 0 评论 -
数据结构:线索二叉树
线索二叉树利用二叉树当中存在的n+1个空链域(空链域只可能存在度小于等于1的结点上)来标记结点在先序、中序、后序遍历中的前驱和后继结点。同时在构建线索化的过程中也可能出现一些问题比如线索二叉树根据构造方式不同,一般分为先序线索二叉树、中序线索二叉树、后序线索二叉树。其实三种线索二叉树的构造过程就是对应的遍历过程,边遍历边线索化。code:#include <stdio.h>#include <stdlib.h>#define ElemTyp..原创 2020-07-09 17:51:21 · 526 阅读 · 0 评论 -
栈的应用:括号配对
括号配对是栈当中的一道经典题,我遇到过的次数估计也有一手之数了。趁着考研复习数据结构又来了一遍。括号配对通常是值[] ()、{}、[(){}]、[({})]类似这样的是合法的,而[][、[])、[(])这样的是非法的。解决的思路也就是从左往右按顺序入栈,只需要左括号入栈,如果遇到又括号则与栈顶括号匹配,不匹配或者栈顶为空则这一个括号的组合序列就不是匹配的。栈、可以用数组模拟一个栈,也可用C++ STL中封装好的,还可以自己定义栈。因为考试和面试中喜欢让自己实现栈,所以我按照前面所学,建立一个顺序栈来原创 2020-05-09 22:35:17 · 864 阅读 · 0 评论 -
数据结构:基于链式存储的双端队列
什么是双端队列?故名思意就是可以在队列的两端进行插入和删除的队列。这样的双端队列既可以当作普通的队列和栈来使用,还可以用在特定的情况下。阅读本文需要先了解双向链表、队列和栈的知识。先看一些提前做好的约定#define ElemType inttypedef struct LinkNode{ // 每个结点双向链表类型的 ElemType data; struct Link...原创 2020-04-12 21:37:33 · 253 阅读 · 1 评论 -
数据结构:基于链式存储的队列
这是一个基于带头结点单链表下实现的的链队列,但是写完我觉得代码中存在如下问题(感觉不够完美)首先看定义:#define ElemType inttypedef struct LinkNode{ // 定义每个元素结点 ElemType data; struct LinkNode *next;} LinkNode;typedef struct{ // 定义队列 Link...原创 2020-04-09 22:16:54 · 709 阅读 · 0 评论 -
数据结构:基于顺序存储的队列(循环队列)
只贴代码,原理参考严蔚敏版或王道考研版的数据结构#include <stdio.h>#include <string.h>#include <stdlib.h>#define MaxSize 15#define ElemType inttypedef struct{ ElemType data[MaxSize]; int front; /...原创 2020-03-25 16:00:34 · 521 阅读 · 0 评论 -
数据结构:基于顺序存储的共享栈
顺序存储的共享栈本质上就是把一个数组两端分别当成一个栈,这两个栈共用一块存储空间。#include <stdio.h>#include <stdlib.h>#define MaxSize 20#define ElemType inttypedef struct{ ElemType data[MaxSize]; int top0; // 0号栈顶指针...原创 2020-03-24 21:59:45 · 756 阅读 · 0 评论 -
数据结构:链栈的实现
栈的原理不再细说(可以参考严蔚敏版 或 王道考研版的数据结构),只贴代码。/* 采用不带头结点的单链表实现栈 */ #include <stdio.h>#include <stdlib.h>#define ElemType inttypedef struct LinkNode{ ElemType data; struct LinkNode *next...原创 2020-03-24 20:48:16 · 681 阅读 · 0 评论 -
数据结构:顺序栈的实现
栈的原理不在细说(可以参考严蔚敏版 或 王道考研版的数据结构),只贴代码。#include <stdio.h>#include <stdlib.h>#define MaxSize 100#define ElemType inttypedef struct{ ElemType data[MaxSize]; int top; // 栈顶指针 指向栈顶元素 ...原创 2020-03-24 16:58:18 · 419 阅读 · 1 评论 -
数据结构:循环双向链表
#include <stdio.h>#include <stdlib.h>#include <string.h>#define ElemType inttypedef struct LNode{ ElemType data; struct LNode *prior; struct LNode *next;}LNode, *LinkList;...原创 2020-03-13 16:14:41 · 152 阅读 · 0 评论 -
数据结构:循环单链表
在上一篇单链表的基础上进行改进,主要改进的地方多为循环控制点、创建初始化单链表:https://blog.csdn.net/hpu2022/article/details/104582008#include <stdio.h>#include <stdlib.h>#include <string.h>#define ElemType int...原创 2020-03-03 17:27:59 · 724 阅读 · 0 评论 -
数据结构:双向链表的实现
带头结点,不带头结点的类似#include <stdio.h>#include <stdlib.h>#define ElemType inttypedef struct DNode{ ElemType data; struct DNode *prior; // 指向前驱结点 struct DNode *next; // 指向后继结点 }DNode...原创 2020-03-03 16:27:06 · 204 阅读 · 0 评论 -
数据结构:单链表的实现
#include <stdio.h>#include <stdlib.h>#include <string.h>#define ElemType inttypedef struct LNode{ ElemType data; struct LNode *next;}LNode, *LinkList;// 带头节点的初始化bool Ini...原创 2020-02-29 21:11:40 · 295 阅读 · 0 评论 -
数据结构:顺序表的实现
#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 10 // 链表元素个数最大值 #define ElemType int // 链表数据类型 typedef struct{ ElemType *data; int MaxSize; int length;}...原创 2020-02-29 16:10:49 · 210 阅读 · 0 评论 -
Java数据结构:链表
code:package test;interface ILink<E>{ // 设置泛型 public void add(E e); // 在末尾增加节点 public void print(); // 输出节点 public int size(); // 计算节点个数 public boolean isEmpty(); // 判断链表使否为空 public ...原创 2019-11-17 19:47:48 · 137 阅读 · 0 评论 -
C/C++ 归并排序的实现
按照自己的想法实现的归并排序,应该没什么问题归并排序定义什么的我就不写了,直接看代码吧普通数组写法:#include <algorithm>#include <iostream>using namespace std;void merge(int a[], int left, int right){ int *b = new int[right ...原创 2019-11-06 13:57:45 · 196 阅读 · 1 评论 -
自然合并排序
自然合并排序算法是对合并排序算法的一种改进。设 a[0:n-1]是无序数组,用一次对数组a的扫描可以找出其中 自然排好序的子数组,然后将相邻的排好序的子数组段两 两合并,继续合并相邻排好序的子数组段,直至将整个数 组排好序。code:#include <algorithm>#include <iostream>using namespace std;in...原创 2019-10-21 20:23:49 · 525 阅读 · 0 评论 -
最小生成树 Kruskal算法
预备知识:并查集,参考我的博客https://blog.csdn.net/hpu2022/article/details/81710828这里再给出一种并查集的写法:const int MAXN = (int) 1e6+7;int pre[MAXN];void init(int n){ for(int i=0; i<n; i++) pre[i] ...原创 2019-03-14 20:21:14 · 615 阅读 · 0 评论 -
最小生成树 Prim算法
Prim算法是从某个顶点出发,然后不断添加边的算法。首先,我们假设有一颗只包含一个顶点v的树T。然后贪心地选取T和其他顶之间相连的最小权值的边,并把它加到T中。不断进行这个操作,就可以得到一颗生成树了。这样得到的就是最小生成树。code:#include <cstdio>#include <algorithm>using namespace std;c...原创 2019-03-14 19:15:10 · 435 阅读 · 0 评论 -
二叉排序树(查询、创建、插入、删除)
临近考试,这里先只发一下代码,关于定义,原理什么的等我有时间了会补充上。#include <iostream>#include <string>using namespace std;typedef int KeyType; // 关键字类型typedef string InfoType; // 其他数据类型typedef struct El...原创 2018-12-28 16:26:39 · 1351 阅读 · 0 评论 -
快速排序+二分查找(递归写法)
关于快速排序参考之前的文章:https://blog.csdn.net/hpu2022/article/details/83069041关于二分查找的参考之前的文章:https://blog.csdn.net/hpu2022/article/details/79845630code:#include <iostream>using namespace std;int...原创 2018-12-27 18:26:37 · 839 阅读 · 0 评论 -
哈夫曼树的构造(C语言实现)
哈夫曼树的构造过程可以详见推荐博客:哈夫曼树以及哈夫曼编码的构造步骤建议先看完推荐博客中的文字说明,或者自己找一本数据结构的树来仔细阅读以下关于哈夫曼树的构造然后再来看下面给出的code这里给出的是关于哈夫曼树的构造代码:#include <cstdio>#include <cstring>using namespace std;typedef s...原创 2018-12-06 17:48:27 · 32862 阅读 · 18 评论 -
链式二叉树 先序、中序、后序 遍历(递归、非递归)
参考博客:click here!链式二叉树存储结构:typedef int DataType;typedef struct BiNode { DataType data; struct BiNode *lc, *rc; // 左右子节点指针 int depth;} BiNode, *BiTree;初始化:void rootInit(BiTree &root...原创 2018-11-27 13:38:34 · 1978 阅读 · 0 评论 -
kmp算法+经典例题
推荐博客:kmp算法详解针对kmp算法的习题训练网址:https://blog.csdn.net/hpu2022/article/details/81812497来看一道经典题目: Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory L...原创 2018-11-22 16:15:30 · 3016 阅读 · 0 评论 -
数据结构 串的顺序表示和实现
上次写链式串的时候就觉得太麻烦了,而且还不一定好用,今天就写顺序的果然方便很多。写的串是常用的字符串以及一些常用函数。全部自己原创的,如有不足还请指出。#include <iostream>using namespace std;const int MAXN = (int) 1e6 + 7;typedef struct Chunk{ char * str;} ...原创 2018-11-22 18:12:04 · 440 阅读 · 0 评论 -
串的链式表示和实现
用链表的方法来写串真的是太麻烦了(下回更新一个用动态数组写的)。下面是我简单实现的链式串的几个功能,没办法,数据结构老师不给代码,这些完全是我自己想的。应该没什么逻辑上的错误,如有发现还请提出来。#include <iostream>#include <cstring>using namespace std;const int SIZE = 80 + 7...原创 2018-11-21 22:10:38 · 494 阅读 · 0 评论 -
队列的链式表示和实现
注意:队首指针 Q.front 指向的不是第一个数据元素结点 Q.front->next 才是。 队尾指针 Q.rear 始终指向最后一个结点。 Q.length 始终是当前队列的长度#include <iostream>using namespace std;typedef struct QNode{ int data; struct QNode *nex...原创 2018-11-13 20:39:19 · 546 阅读 · 0 评论 -
循环队列的顺序表示和实现
在开始之前我们做如下约定:队空: front == rear队满: (Q.rear + 1) % MaxSize == Q.front求循环队列的长度: (Q.rear - Q.front + MaxSize) % MaxSize入队:Q.rear = (Q.rear + 1) % MaxSize出队: Q.front = (Q.front + 1) % MaxSize ...原创 2018-11-08 15:49:32 · 507 阅读 · 0 评论 -
用链栈实现十进制到二进制的转换
#include <iostream>using namespace std;typedef struct Stack{ int data; int length; Stack *next;} StackNode, *LinkStack;bool StackInit(LinkStack &S) // 初始化函数,初始为空{ S = NULL;...原创 2018-11-08 15:11:27 · 7137 阅读 · 1 评论 -
栈的顺序表示和实现
#include <iostream>using namespace std;const int MAXN = 1000+7;const int INF = 0X3f3f3f3f;typedef struct { int *base; // base不存元素 int *top; // top始终指向栈顶元素 int StackSize;} SqStack...原创 2018-11-03 13:39:23 · 375 阅读 · 0 评论 -
线性表的顺序表示和实现
||=== 构建: Debug 在 链表 中 (编译器: GNU GCC Compiler) ===|C:\Users\张成龙\Desktop\code\链表\main.cpp||In function 'int main()':|C:\Users\张成龙\Desktop\code\链表\main.cpp|137|error: jump to case label [-fpermissive]...原创 2018-11-01 16:12:23 · 639 阅读 · 0 评论 -
用数组模拟实现约瑟夫环
约瑟夫问题:n个人围成一圈,从第一个人开始报数,数到m的人出圈;再由下一个人开始报数,数到m的人出圈;…输出依次出圈的人的编号。n,m由键盘输入。要求: 用数组模拟实现 。#include <iostream>#include <cstring>using namespace std;const int MAXN = 10000 + 7;const int...原创 2018-10-30 14:57:51 · 624 阅读 · 0 评论 -
整数划分(递归,附程序执行过程)
问题描述: 任何一个大于1的自然数N,总可以拆分成若干个小于n的自然数之和。输入: n输出:按字典序输出具体方案。我们以 n = 4 为例说明一下执行过程, 下附代码 我们以 n = 4 为例说明一下运行过程阅读本段 一定要注意各个变量值的变化cin >> n = 4, 进入func函数此时 s = 4, t = 1;for 循环 i = a[1-1] ...原创 2018-10-23 08:53:13 · 802 阅读 · 0 评论 -
递归实现汉诺塔
汉诺塔移动数 ans = pow(2, n) - 1;推荐博客:https://blog.csdn.net/xb2355404/article/details/79144451#include <iostream>using namespace std;inline void move(char A, char B){ cout << A <&...原创 2018-10-22 13:12:37 · 201 阅读 · 0 评论 -
双向循环链表
在上一篇双向链表的基础上增加了循环,有不小的改动,特别是一些核心的地方。例如,如何在插入结点的过程中,确保时刻都在首位相连; 遍历循环条件怎么写 等等。双向链表:https://blog.csdn.net/hpu2022/article/details/83146619双向循环链表:#include <iostream>#include <string>...原创 2018-10-21 19:04:43 · 919 阅读 · 0 评论 -
循环链表 实现 约瑟夫环
【约瑟夫环问题】已知 n 个人(n>=1)围坐一圆桌周围,从 1 开始顺序编号,从序号为 1 的人开始报数,顺时针数到 m 的那个人出列。下一个人又从 1 开始报数,数到m 的那个人又出列。依此规则重复下去,直到所有人全部出列。请问最后一个出列的人的初始编号。 【要求】输入人数 n,所报数 m,输出最后一个人的初始编号。 【约瑟夫环问题解决思路】首先因为是圆桌问题,...原创 2018-10-20 22:04:20 · 1000 阅读 · 0 评论 -
双向链表
建立的是一个有序的管理学生信息的双向链表,功能有创建,插入,删除, 遍历, 查找等。#include <iostream>#include <string>using namespace std;typedef long long LL;struct List{ int num; string name; LL tel; struct List * ...原创 2018-10-18 14:53:27 · 150 阅读 · 0 评论 -
单向链表( 创建 插入 删除 遍历 )
#include <cstdio> #include <cstdlib>#include <cstring>using namespace std;struct list* create(); /*新建链表*/ struct list* insert( struct list *head, struct list *temp ); /*插入*/ s...原创 2018-04-07 21:59:32 · 393 阅读 · 0 评论 -
二叉堆实现
这里给出的是最小二叉堆左儿子结点编号是自己编号的 x 2 + 1右儿子结点编号是自己编号的 x 2 + 2在插入元素的时候先插入到末尾,然后向上比较,如果父节点的值大于新元素的值就交换,直到父节点小于新元素。在删除元素的时候,先取出根节点的值,然后将末尾元素提到根节点,再向下比较。#include <cstdio>using namespace std;con...原创 2018-10-09 21:49:38 · 168 阅读 · 1 评论 -
STL map用法及其常用函数介绍
1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667...原创 2018-04-09 21:56:07 · 525 阅读 · 0 评论