呜呜 写这个东西花了我2天 居然花了两天!!我还要写AVL呢啊啊啊啊啊啊啊!!!!!! 等下还要跑去上自习 大早上起来脸都没洗现在先赶紧发博客 昨晚写出来了独自在其他人都睡着了的宿舍狂喜乱舞.. 迷之想哭 不知道能不能考上...... 不管能不能考上 活在当下就对了 走好每一步踏踏实实吧!! 删除操作的代码考虑了很多东西,自己写的时候一开始觉得有点抽象,特别是左右孩子链接的处理,还有是否是根结点的判别…… 其实也不知道我这个写法对不对,看了一些网上的代码,别人的都写得好简单啊! 先这么写着吧,回…
对比上一篇文章"顺序存储二叉树",链式存储二叉树的优点是节省空间. 二叉树的性质: 1.在二叉树的第i层上至多有2i-1个节点(i>=1). 2.深度为k的二叉树至多有2k-1个节点(k>=1). 3.对任何一棵二叉树T,如果其终结点数为n0,度为2的节点数为n2,则n0=n2+1. 4.具有n个节点的完全二叉树的深度为log2n+1. 5.对于一棵有n个节点的完全二叉树的节点按层序编号,若完全二叉树中的某节点编号为i,则若有左孩子编号为2i,若有右孩子编号为2i+1,母亲…
二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要有:先序遍历(NLR),中序遍历(LNR),后序遍历(LRN),和层次遍历. 注意: 由二叉树的先序序列和中序序列可以唯一地确定一颗二叉树: 由二叉树的后序序列和中序序列可以唯一地确定一颗二叉树: 由二叉树的层序序列和中序序列可以唯一地确定一棵二叉树: 但,由二叉树的先序序列和后序序列无法唯一地确定…
二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值均大于根节点的关键字: 3. 左.右子树本身也分别是一颗二叉查找树. 二叉查找树的实现,功能有: 1. 用一个数组去构建二叉查找树 2. 二叉查找树的中序遍历和层次遍历 3. 插入节点 4. 查找节点 5. 查找二叉树中的最大值和最小值 6.  得到节点的直接父节点 7. 得到节点的直接前驱和直接后…
本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所示.   1.栈的顺序存储结构 用数组存放数据,top变量来指示栈顶元素在数组中的位置(栈顶指针).一个长度为5的栈的示意图如下: 实现程序: /** * 栈的顺序储存结构 * * 问题:构造器中,泛型数组创建是否有更好的方法? * @author Yongh * */ public class SqStac…
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可以去看看,欢迎大家一起交流学习. LinkStack.h 1 #ifndef LINKSTACK_H 2 #define LINKSTACK_H 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 7 8 // 链式栈的节点 9 typede…
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储结构的弱点,在做插入或删除操作时,需移动大量元素. 而链式存储结构,由于它不需要逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但同时也失去了顺序表可随机存取的优点. 线性链表 wiki中的定义: 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不…
基本概念 其它概念详情參看前一篇博文:栈的顺序存储 - 设计与实现 - API实现 这里也是运用了链表的链式存储API高速实现了栈的API. 代码: // linkstack.h // 链式存储栈的API声明 #ifndef _MY_LINKSTACK_H_ #define _MY_LINKSTACK_H_ typedef void LinkStack; // 创建栈 LinkStack* LinkStack_Create(); // 销毁栈 void LinkStack_Destroy(Lin…
优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高进先出 (largest-in,first-out)的行为特征. 例如下图:任务的优先权及执行顺序的关系                  优先队列是0个或多个元素的集合,每个元素都有一个优先权或值 时间复杂度         Push时进行排序                 有序链表(即顺序…
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #define OK 1 #define ERROR 0 typedef int QElemType; typedef int Status; class QNode{ public: QNode():data(0),next(NULL) {} QElemType data; QNode *next; }; class…