数据结构
数据结构学习笔记
Kriens
这个作者很懒,什么都没留下…
展开
-
线性表实现
1.顺序表:仅由一个结构体组成,定义及实现如下所示:struct order_list { elementtype data[maxsize];//定义一个数组,够长 int last;//最后一个元素的位置}typedef struct order_list* list;//指向该结构体的指针//初始化list initial(){ list L=(list...原创 2019-08-03 18:19:17 · 207 阅读 · 0 评论 -
平衡二叉树
平衡二叉树 (Balanced Binary Tree) (AVL树) :空树,或者任一结点左、右子树高度差的绝对值不超过1设nh高度为h的平衡二叉树的最少结点数。结点数最少时:nh=nh−1+nh−2+1设n_h高度为h的平衡二叉树的最少结点数。结点数最少时: n_h = n_{h-1} + n_{h-2} + 1设nh高度为h的平衡二叉树的最少结点数。结点数最少时:nh=nh−1+n...原创 2019-08-12 12:16:39 · 1097 阅读 · 0 评论 -
堆(优先队列,即最大堆,最小堆)
堆:优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是 依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。堆的两个特性 :结构性:用数组表示的完全二叉树;有序性:任一结点的关键字是其子树所有结点的最大值(或最小值)“最大堆(MaxHeap)”,也称“大顶堆”:最大值“最小堆(MinHeap)”,也称“小顶堆” :最小值下面以最大堆(数组实现)为例,...原创 2019-08-12 12:10:55 · 693 阅读 · 0 评论 -
哈夫曼树与哈夫曼编码
哈夫曼树与哈夫曼编码:哈夫曼树的定义:带权路径长度(WPL)(WPL)(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值 wkw_kwk,从根结点到每个叶子结点的长度为 lkl_klk,则每个叶子结点的带权路径长度之和就是:WPL=∑k=1nwklkWPL=\sum_{k=1}^n w_kl_kWPL=∑k=1nwklk最优二叉树或哈夫曼树: WPLWPLWPL最小的二叉树...原创 2019-08-12 12:06:52 · 188 阅读 · 0 评论 -
二叉树同构判别
二叉树同构判别:int isomorphism(tree a,tree b){ if ( !a && !b ) return 1; //两个都空 if ( (!a&&b) || (a&&!b) ) return 0; // 一个空,一个不空 if (a->data!=b->data) return 0; //都不...原创 2019-08-12 11:45:05 · 384 阅读 · 0 评论 -
求二叉树的高度
求二叉树的高度:int binary_height(tree bt){ int hl,hr,maxh; if (bt){ hl=binary_height(bt->left); //左子树深度 hr=binary_height(bt->right); //右子树深度 maxh=(hl>hr)?hl:hr; /...原创 2019-08-12 11:43:56 · 139 阅读 · 0 评论 -
二叉树的存储结构
二叉树的存储结构 :1. 顺序存储结构 :完全二叉树:按从上至下、从左到右顺序存储n个结点的完全二叉树的结点父子关系:非根结点(序号 i > 1)的父结点的序号是 i / 2;结点(序号为 i )的左孩子结点的序号是 2i,(若2 i <= n,否则没有左孩子);结点(序号为 i )的右孩子结点的序号是 2i+1,(若2 i +1<= n,否则没有右孩...原创 2019-08-12 11:42:40 · 503 阅读 · 0 评论 -
二叉树的遍历(先中后序,递归,非递归,层序)
二叉树的遍历 :1.递归遍历:先序遍历:(遍历过程为: ① 访问根结点; ② 先序遍历其左子树; ③ 先序遍历其右子树)void preorder_traversal(tree bt){ if (bt){ cout << bt->data ; //无非是该语句位置不同 preorder_traversal(bt->left)...原创 2019-08-12 11:25:03 · 108 阅读 · 0 评论 -
树的基本内容
二叉树的存储结构 :顺序存储结构 :完全二叉树:按从上至下、从左到右顺序存储n个结点的完全二叉树的结点父子关系:非根结点(序号 i > 1)的父结点的序号是 i / 2;结点(序号为 i )的左孩子结点的序号是 2i,(若2 i <= n,否则没有左孩子);结点(序号为 i )的右孩子结点的序号是 2i+1,(若2 i +1<= n,否则没有右孩子...原创 2019-08-12 15:03:48 · 336 阅读 · 0 评论 -
7-23 还原二叉树(求树高)
7-23 还原二叉树 (25 分)给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5代码如下:/*...原创 2019-08-14 16:02:12 · 396 阅读 · 0 评论 -
算法时间复杂度
一,概念:算法: 解决问题的简单指令的集合,比如排序就有很多种,虽然作用相同,但在过程中消耗的资源和时间却会有很大的区别。因而对一种算法分析它的时间复杂度是非常重要的。时间维度: 执行当前算法所消耗的时间,即 时间复杂度。表示形式: 算法的时间复杂度通常用大O符号大O符号大O符号表述, T[n]=O(f(n))T[n] = O(f(n))T[n]=O(f(n)) 。其含义为T(n)T(n)T...原创 2019-07-27 21:10:20 · 382 阅读 · 0 评论 -
队列
队列的定义与操作(first in,first out)1.顺序存储:在该方式中,队列由一个结构体构成,其中结构体包含:一个数组(定长),队列头尾标识和最大容量。由此可知顺序存储的队列长度有限,下面会介绍链式存储队列(长度不限)。在顺序存储队列中,若用普通数组:如图所示,会出现队列有空位而无法入队的情况,因而采用另外一种方式:即循环队列,只要队列有空位即可入队,但由此而来的问题是,当队列...原创 2019-08-04 18:33:32 · 129 阅读 · 0 评论 -
栈堆
栈堆的定义与操作(last in,first out list)1.顺序存储:struct stack_order{ elementtype data[max]; int max;//最大容量 int top;//栈顶位置}typedef struct stack_order* stack;//初始化stack initial(int max){ st...原创 2019-08-04 18:30:39 · 202 阅读 · 0 评论 -
二叉搜索树(查找,插入,删除)
动态查找:集合是动态变化的 ,除查找,还可能发生插入和删除以二叉搜索树为例://结构如下:typedef struct binary_tree* tree;struct binary_tree{ elementtype data; tree left; tree right;};二叉搜索树定义:一棵二叉树,可以为空;如果不为空,满足以下性质:非空左子树的...原创 2019-08-12 14:55:33 · 154 阅读 · 0 评论