
数据结构
石院情歌小王子
所有博文仅为日后复习方便查找,无其他用途,部分非原创,因标记转载较繁琐,所以标记为原创,无他意
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++模板类实现LinkList
LinkList.h文件 #pragma once #include <iostream> //在插入元素时,应该把每一个元素都保存下来 //模板类中应该能分配节点,缓存节点 template <typename T> struct Node { T t; Node<T> *next; }; template <typename T> c...原创 2020-01-09 20:42:20 · 1578 阅读 · 0 评论 -
排序
排序有选择法、插入排序、冒泡排序、希尔排序、快速排序法、归并排序等方法。 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,则此排序算法是稳定的。 (1)选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列...原创 2020-01-09 20:33:29 · 152 阅读 · 0 评论 -
模板类实现STL_Array
SeqList.h文件 #pragma once #include <iostream> using namespace std; template <typename T> class SeqList { public: SeqList(int capacity); ~SeqList(void); int getLen(); int getCapacit...原创 2019-11-21 21:09:00 · 370 阅读 · 0 评论 -
树的非递归遍历_中序
重要 算法思路: 1.如果结点有左子树,该结点入栈 没有左子树,访问该结点 2.如果结点有右子树,重复步骤1, 如果没有右子树,访问栈顶,重复步骤1访问右子树 3.如果栈为空,遍历结束 #include <iostream> #include <stack> typedef struct BitNode { int data; struct BitNo...原创 2019-11-20 18:02:09 · 176 阅读 · 0 评论 -
树的表示法以及遍历
树的表示法有二叉链表示法、三叉链表示法、双亲链表示法等 二叉链表示法: typedef struct BiTNode { int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //二叉链表示法1 int main_01() { BiTNode t1,t2,t3,t4,t5; memset(&t1,0,size...原创 2019-11-14 21:02:56 · 264 阅读 · 0 评论 -
树和二叉树
根:根节点,没有前驱(即结点1) 结点的度:一个结点的子树数目称为该结点的度。(例如结点1的结点的度为3,结点2的结点的度为3,结点3的结点的度为0)。 树的度:所有结点度当中,度最高的一个。(上图树的度是3)。 叶子结点:上图应该是:3、5、6、7、9、10(没有后继) 分之结点:除了叶子结点,其他的都称为分之结点,和叶子结点构成互补的关系。(1、2、4、8) 内部结点:分之结点除...原创 2019-11-14 17:39:05 · 139 阅读 · 0 评论 -
队列的链式存储
基于以前的线性表实现,线性表见https://blog.csdn.net/qq_33185566/article/details/99684151 linkqueue.h文件 #include "stdio.h" #include "stdlib.h" #include "linklist.h" typedef void LinkQueue; typedef struct _tag_Li...原创 2019-11-14 13:31:45 · 135 阅读 · 0 评论 -
队列的顺序存储
先进先出,就是"队列" 我们可以想象成,排队买票,先来的先买,后来的只能在末尾,不允许插队。 队列的两个基本操作:入队 将一个数据放到队列尾部;出队 从队列的头部取出一个元素。队列也是一种操作受限的线性表数据结构 它具有先进先出的特性,支持队尾插入元素,在队头删除元素。 队列的概念很好理解,队列的应用也非常广泛如:循环队列、阻塞队列、并发队列、优先级队列等。 代码(基于以前的线性表实现,线性...原创 2019-11-13 19:54:01 · 372 阅读 · 0 评论 -
栈的应用3:中缀表达式转后缀表达式
中缀表达式转后缀表达式思路: 对于数字:直接输出 对于符号: 左括号:进栈 运算符号:与栈顶符号进行优先级比较 若栈顶符号优先级低,此符号进栈(默认栈顶若是左括号,左括号优先级最低) 若栈顶符号优先级高,将栈顶符号弹出并输出,之后进栈 右括号:将栈顶符号弹出并输出,直到匹配到左括号 遍历结束:将栈中所有符号弹出并输出 ...原创 2019-11-13 16:18:10 · 146 阅读 · 0 评论 -
栈的应用2:后缀计算
后缀表达式: 对于数字:进栈 对于符号: 从栈中弹出右操作数 从栈中弹出左操作数 根据符号进行计算 将运算压入栈中 #include "linkstack.h" int isNum(char c) { return ('0' <= c) && (c <= '9'); } int isSymbol(char c) { return (c == '+') || (...原创 2019-11-12 20:35:35 · 251 阅读 · 0 评论 -
栈的应用1:就近匹配
当需要检测成对出现但又不相邻的事物时,可以使用栈“后进先出”的特性 栈非常适合于需要“就近匹配”的场合、 以下是一个例子: 几乎所有的编译器都有检测括号是否匹配的能力,那么此功能如何实现呢? 算法思路: 从第一个字符开始扫描,当遇见普通字符时忽略, 当遇见左符号时压入栈中 当遇见右符号时从栈中弹出栈顶符号并进行匹配, 匹配成功,继续读入下一个字符 匹配失败,立即停止并报错 结束: 成功:所有字...原创 2019-11-12 19:41:52 · 212 阅读 · 0 评论 -
栈的链式存储结构
栈的链式存储结构与顺序存储结构开口方向应相反,因为对链表的头部操作会减少对链表的遍历,所以我们选用第二种结构 同时我们基于线性表的链式存储实现栈的链式存储,线性表的链式存储实现见:https://blog.csdn.net/qq_33185566/article/details/99684151 linkstack.h文件 #include "stdio.h" #include "li...原创 2019-11-12 16:48:53 · 225 阅读 · 0 评论 -
栈的顺序存储的实现
栈是一种先进先出的结构,他是一种特殊的线性表,栈的数据元素之间的一一对应的关系可以利用顺序的存储来表示, 那么可以利用数组来实现栈数据结构。 在第二种结构中,从数组开始位置进行操作,对栈进行操作时会涉及到大量的数组的移动和删除,而第二种从尾部操作则会避免不必要的操作,所以我们选用第一种结构。同时由于栈是一种特殊的线性表,所以直接基于以前实现的线性表来实现栈的顺序存储,线性表的顺序存储见:ht...原创 2019-11-12 16:39:27 · 442 阅读 · 0 评论 -
线性表的链式存储的设计与实现
linklist.h文件: #pragma once #include "stdio.h" #include "stdlib.h" #include "string.h" /* 指针指向谁,就把谁的地址赋值给指针 */ typedef void LinkList; typedef struct _tag_LinkListNode { struct _tag_LinkListNode* ne...原创 2019-08-16 19:23:43 · 274 阅读 · 0 评论 -
循环链表的实现
1.标准的循环链表与一般链表多了个游标,多了3个游标操作函数。 2.循环链表API的写法与一般链表大致一样,只有0号节点的增加和删除需要注意,还有一次节点的插入和最后一个节点的删除需要注意,删除时游标的移动需要注意。 3.循环链表相对于一般链表并无多大性能上的增强,只是让链表解决约瑟夫问题十分方便。 circlelist.h文件 #pragma once #include "s...原创 2019-08-21 14:38:28 · 231 阅读 · 0 评论 -
双向链表的设计与实现
1.双向链表可以完成普通链表的所有操作,并且解决了普通链表逆向遍历效率低的问题。 双向链表相对于普通链表没有多大提示,需要注意的就是插入删除操作时的异常处理, 插入删除0号节点的异常,第一次插入的异常,最后一次删除的异常。 dlinklist.h文件 #pragma once #include "stdio.h" #include "stdlib.h" #include "string....原创 2019-08-23 17:36:14 · 336 阅读 · 0 评论 -
数据结构 线性表顺序存储的设计与实现
seqlist.h文件: #pragma once #include "stdlib.h " #include "stdio.h" #include "memory.h" typedef void SeqList; typedef void SeqListNode; //创建线性表 SeqList* SeqList_Create(int capacity); //销毁线性表 void Se...原创 2019-08-08 17:42:48 · 286 阅读 · 0 评论