- 博客(16)
- 资源 (6)
- 收藏
- 关注
原创 顺序查找和折半查找(代码实现)
顺序查找这个查找比较简单,就是单纯的比较数据,如果相等就是查找成功,但是对于数据量大的数据,效率会非常的低。直接上代码//顺序查找算法 int Search(Table table , int key){ table.elem[0] = key; int i; for(i = table.length-1;table.elem[i] != key;--i); return i;}下面是顺序查找的优化算法(基于顺序表的顺序查找适用)当我们用上面的结构进行查找的话,我们会发现一个神奇是事情
2020-12-09 22:10:16
8928
3
原创 图的邻接矩阵存储(简单代码实现)
说起来邻接矩阵,对于学过线性代数的同学理解起来非常简单其实就是一个数字组成方阵,每一个数字都能有有意义的代表一些信息。下面来看一个例子如上图所示的图,使用邻接矩阵存储的话应该是下面的情况由此可见,邻接矩阵存储的无向图必定是对称的如果是下面的有向图我们该如何表示呢由行到列看,顶点1到3是连同的,路径的权值是10,而顶点3到1是不连通的所以用数学中的无穷大进行表示。我相信大家也能够看出来有向图和无向图的区别了下面用代码来实现带权值的无向图的的存储存储结构typedef struct { c
2020-11-13 11:25:30
8514
原创 二叉树的应用(排序二叉树的实现及其详解)以及平衡二叉树的调整方法
排序二叉树所谓的排序二叉树,看名字就能看出来肯定是能够用来排序的二叉树,按照我们以前构造的二叉树,无论是中序、后序、先序都不能够保证输出序列能够有序的输出。现在我们来看,二叉排序树是怎么一回事。二叉排序树只有两种情况①一棵空的二叉树②具有以下特征的二叉树1.若二叉树的左子树非空,那么左子树上的结点值都小于根节点。2.若二叉树的右子树非空,那么右子树上的结点值都大于根节点。3.左右子树又全部满足以上两条特征。现在我们构造如下图所示的二叉树分析可知,该二叉树是一个二叉排序树。接下来我们对其
2020-10-10 21:15:13
866
原创 二叉树的线索化(带有头结点与非头结点的区别)及其遍历 (超级详细)
线索二叉树我们先来看一下什么是线索二叉树我想平常的二叉树的结构大家都非常了解(如下图所示),不难看出当二叉树有n个结点的时候,有2n个指针域,但是却有n+1个指针域的指向都是空指针域,当我们寻找某一个结点的孩子结点的时候非常的方便,但是当我们想要取寻找一个结点的双亲结点,却只能通过遍历的方法去找寻,如果我们能够充分的利用这些空的指针域来表示结点的前驱和后继,毫无疑问会给我们的操作带来不小的便捷,于是产生了线索二叉树的概念。但是如果将原来指向空的指针域指向前驱或者后继,我们会没有办法去区分是否指针域是否
2020-10-09 01:05:11
5384
5
原创 二叉树的非递归遍历和层次遍历详解
二叉树非递归遍历非递归的后序遍历二叉树//非递归的后续遍历二叉树 void HXprint(Tree *tree){ Stack s = initStack(); //初始化一个下面使用的栈 treeNode *p = tree; //新建一个遍历指针 treeNode *r=NULL; //辅助变量 cout<<"-------"<<endl; while(p||!isEmpty(s)){ //当遍历变量和栈同时为空时 表示遍历完成
2020-10-07 10:35:15
2668
原创 循环队列的数组实现()
理论知识由于顺序存储的队列会产生“假溢出的情况”,我们可以将队列的存储结构臆想为一个闭合的环状结构,这便是我们所说的循环队列,如下图所示。循环队列的逻辑结构但是循环队列中,判断队空和堆满的条件都是Q.rear = Q.front,这给我们的编程实现带来了很多麻烦,这样我们会有三种处理方法,1.牺牲一个存储单元,入队的时候将队头指针在队尾指针的下一位置最为队列满的条件这是判断队空的条件仍然是:Q.rear = Q.front但是判断队满的条件变为:(Q.rear+1)%MAXSIZE = Q.fr
2020-09-08 18:10:30
306
原创 队列的链式实现(带有头结点)
链式队列是采用链式存储结构实现的队列。存储结构typedef struct Qnode{ int data; struct Qnode *next;} *Quene; //每一个结点的结构 typedef struct{ Quene front; //队头指针 Quene rear; //队尾指针 }LinkQuene;初始化//初始化void initQuene(LinkQuene &Q){ Q.front = Q.rear = new Qn
2020-09-07 20:29:02
1290
原创 队列的数组实现
存储结构typedef struct{ int data[MAXSIZE]; //存储数据的数组 int front,rear; //队头队尾指针 int size;}Quene;基本操作//初始化void initQuene(Quene &Q) { Q.rear = 0; Q.front = 0; Q.size = 0;}//判空bool isfull(Quene &Q) { return Q.size == MAXSIZE;}//入队voi
2020-09-06 21:30:11
156
原创 栈的顺序存储(数组实现)
栈的定义栈是只允许一一端进行操作的的线性表,首先强调的是栈是一种线性表,其次栈只限定在一端进行操作。基本操作initstack() 初始化栈stackempty() 判断栈空push() 进栈pop() 出栈gettop() 获取栈顶元素destorystack() 销毁栈顺序栈的实现初始化typedef struct{ int data[MAX]; int top;}sqstack;//初始化void initStack(sqstack
2020-09-06 20:45:03
1288
原创 栈的链式存储(单链表实现)
栈的链式存储(带有头结点)与单链表的创建以及基本操作相似,大家自行脑补 哈哈 (最重要的是理清楚指针的变动以及变动的原因)存储结构typedef struct stackNode{ int data; //数据域 struct stackNode *next; //指向下一个结点的指针域 }*linkStack;基本操作初始化bool initstack(linkStack &S){ S = NULL; return true;}入栈//入栈bool pu
2020-09-06 20:27:29
1116
原创 指针单链表
使用指针域进行初始化单链表的两种方式1.头插法进行初始化(详情见代码注释)#include <iostream>#include <stdlib.h>using namespace std;typedef struct LNode{ int data; //数据域 struct LNode *next;//指针域}LNode,*LinkList; //定义非指针变量和指针变量的结点LinkList initLinkList(LinkList &L){ //
2020-07-06 20:13:27
383
三个版本的mysql
2020-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人