![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
石院情歌小王子
所有博文仅为日后复习方便查找,无其他用途,部分非原创,因标记转载较繁琐,所以标记为原创,无他意
展开
-
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 · 1400 阅读 · 0 评论 -
排序
排序有选择法、插入排序、冒泡排序、希尔排序、快速排序法、归并排序等方法。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,则此排序算法是稳定的。(1)选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列...原创 2020-01-09 20:33:29 · 122 阅读 · 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 · 220 阅读 · 0 评论 -
树的非递归遍历_中序
重要算法思路:1.如果结点有左子树,该结点入栈没有左子树,访问该结点2.如果结点有右子树,重复步骤1,如果没有右子树,访问栈顶,重复步骤1访问右子树3.如果栈为空,遍历结束#include <iostream>#include <stack>typedef struct BitNode{ int data; struct BitNo...原创 2019-11-20 18:02:09 · 139 阅读 · 0 评论 -
树的表示法以及遍历
树的表示法有二叉链表示法、三叉链表示法、双亲链表示法等二叉链表示法:typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//二叉链表示法1int main_01(){ BiTNode t1,t2,t3,t4,t5; memset(&t1,0,size...原创 2019-11-14 21:02:56 · 216 阅读 · 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 · 106 阅读 · 0 评论 -
队列的链式存储
基于以前的线性表实现,线性表见https://blog.csdn.net/qq_33185566/article/details/99684151linkqueue.h文件#include "stdio.h"#include "stdlib.h"#include "linklist.h"typedef void LinkQueue;typedef struct _tag_Li...原创 2019-11-14 13:31:45 · 104 阅读 · 0 评论 -
队列的顺序存储
先进先出,就是"队列" 我们可以想象成,排队买票,先来的先买,后来的只能在末尾,不允许插队。队列的两个基本操作:入队 将一个数据放到队列尾部;出队 从队列的头部取出一个元素。队列也是一种操作受限的线性表数据结构 它具有先进先出的特性,支持队尾插入元素,在队头删除元素。队列的概念很好理解,队列的应用也非常广泛如:循环队列、阻塞队列、并发队列、优先级队列等。代码(基于以前的线性表实现,线性...原创 2019-11-13 19:54:01 · 306 阅读 · 0 评论 -
栈的应用3:中缀表达式转后缀表达式
中缀表达式转后缀表达式思路:对于数字:直接输出对于符号: 左括号:进栈 运算符号:与栈顶符号进行优先级比较 若栈顶符号优先级低,此符号进栈(默认栈顶若是左括号,左括号优先级最低) 若栈顶符号优先级高,将栈顶符号弹出并输出,之后进栈 右括号:将栈顶符号弹出并输出,直到匹配到左括号遍历结束:将栈中所有符号弹出并输出...原创 2019-11-13 16:18:10 · 105 阅读 · 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 · 206 阅读 · 0 评论 -
栈的应用1:就近匹配
当需要检测成对出现但又不相邻的事物时,可以使用栈“后进先出”的特性栈非常适合于需要“就近匹配”的场合、以下是一个例子:几乎所有的编译器都有检测括号是否匹配的能力,那么此功能如何实现呢?算法思路:从第一个字符开始扫描,当遇见普通字符时忽略,当遇见左符号时压入栈中当遇见右符号时从栈中弹出栈顶符号并进行匹配,匹配成功,继续读入下一个字符匹配失败,立即停止并报错结束:成功:所有字...原创 2019-11-12 19:41:52 · 148 阅读 · 0 评论 -
栈的链式存储结构
栈的链式存储结构与顺序存储结构开口方向应相反,因为对链表的头部操作会减少对链表的遍历,所以我们选用第二种结构同时我们基于线性表的链式存储实现栈的链式存储,线性表的链式存储实现见:https://blog.csdn.net/qq_33185566/article/details/99684151linkstack.h文件#include "stdio.h"#include "li...原创 2019-11-12 16:48:53 · 187 阅读 · 0 评论 -
栈的顺序存储的实现
栈是一种先进先出的结构,他是一种特殊的线性表,栈的数据元素之间的一一对应的关系可以利用顺序的存储来表示, 那么可以利用数组来实现栈数据结构。在第二种结构中,从数组开始位置进行操作,对栈进行操作时会涉及到大量的数组的移动和删除,而第二种从尾部操作则会避免不必要的操作,所以我们选用第一种结构。同时由于栈是一种特殊的线性表,所以直接基于以前实现的线性表来实现栈的顺序存储,线性表的顺序存储见:ht...原创 2019-11-12 16:39:27 · 354 阅读 · 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 · 234 阅读 · 0 评论 -
循环链表的实现
1.标准的循环链表与一般链表多了个游标,多了3个游标操作函数。2.循环链表API的写法与一般链表大致一样,只有0号节点的增加和删除需要注意,还有一次节点的插入和最后一个节点的删除需要注意,删除时游标的移动需要注意。3.循环链表相对于一般链表并无多大性能上的增强,只是让链表解决约瑟夫问题十分方便。circlelist.h文件#pragma once#include "s...原创 2019-08-21 14:38:28 · 193 阅读 · 0 评论 -
双向链表的设计与实现
1.双向链表可以完成普通链表的所有操作,并且解决了普通链表逆向遍历效率低的问题。双向链表相对于普通链表没有多大提示,需要注意的就是插入删除操作时的异常处理,插入删除0号节点的异常,第一次插入的异常,最后一次删除的异常。dlinklist.h文件#pragma once#include "stdio.h"#include "stdlib.h"#include "string....原创 2019-08-23 17:36:14 · 292 阅读 · 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 · 234 阅读 · 0 评论