随笔分类 - 数据结构
摘要:An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the
阅读全文
摘要:2.6哈夫曼树和哈夫曼编码 2.6.1什么是哈夫曼树(Huffman Tree)? 带权路径长度(WPL):设有二叉树有n个叶子结点,每个叶子结点带有权值wk,从根结点到每个结点的长度为lk,则每个叶子结点的带权路径长度之和就是WPL,WPL=$\sum _{n=1}^n w_k l_k$ 最优二叉
阅读全文
摘要:2.5堆(Heap)的定义和性质 2.5.1堆的定义 优先队列:特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。 堆的两个特性: 结构性:用数组表示的完全二叉树 有序性:任一结点的关键字是其子树所有节点的最大值或最小值,最大堆(Max Heap),也称为
阅读全文
摘要:2.4平衡二叉树 背景:平衡二叉树首先是二叉排序树。基于二叉排序树,发现树越矮查找效率越高,进而发明了二叉平衡树 2.4.1平衡二叉树的定义 平衡因子(BF Balance factor):BF(T)=hL-hR,其中hL和hR分别为T的左、右子树的高度。 平衡二叉树(Balanced Binary
阅读全文
摘要:2.4树的应用——二叉搜索树 2.4.1二叉搜索树(Binary Search Tree)的定义与性质 也称为二叉排序树或者二叉搜索树 性质: 非空左子树的所有键值小于其根结点的键值 非空右子树的所有键值大于其根结点的键值 左、右子树都是二叉搜索树 2.4.2二叉搜索树的查找 1 typedef s
阅读全文
摘要:Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. Input Specification: Each input file contains one t
阅读全文
摘要:给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 图2 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵
阅读全文
摘要:参考资料是浙江大学的《数据结构》网课,b站和中国大学MOOC都可以找到 笔记和C/C++程序参考老师上课的PPT以及网上大佬的博客https://blog.csdn.net/liyuanyue2017/article/details/83688005。 目录 线性结构 线性表 栈 队列 练习题 两个
阅读全文
摘要:1.3队列(Queue)及实现 1.3.1队列的定义 具有一定操作约束的线性表,插入和删除操作只能在一端插入(AddQ),在另一端删除(DeleteQ)。 1.3.2队列的存储实现 1.3.2.1队列的顺序存储实现 实际上就是一维数组和记录头尾元素的变量front和rear。 1 #define M
阅读全文
摘要:1.2堆栈(Stack)及实现 1.2.1堆栈的定义 具有一定操作约束的线性表,只在一端(栈顶top)做插入(push)、删除(pop),后进先出(LIFO)。 1.2.2栈的存储实现 1.2.2.1栈的顺序存储实现 通常由一个一维数组和一个记录栈顶元素位置的变量组成。 1 #define MaxS
阅读全文
摘要:1.1线性表(List)及实现 1.1.1线性表的定义 由同类型数据元素构成有序序列的线性结构 表中元素个数成为L的表长 表中无元素时,称为空表 表的起始位置称为表头,结束位置称为表尾 1.1.2线性表的存储实现 数组和链表的空间分配情况: 数组在静态存储分配情形下,存储元素数量受限制,动态存储分配
阅读全文
摘要:2.3二叉树的遍历 树的表示 1 //树的表示 2 typedef struct TreeNode *BinTree; 3 struct TreeNode 4 { 5 int Data;//存值 6 BinTree Left;//左儿子结点 7 BinTree Right;//右儿子结点 8 };
阅读全文
摘要:2.1树 2.1.1树(Tree)的定义和性质 n(n>=0)个节点构成的有限集合;当n=0时,称为空树。 对于任何一刻非空树,它具备以下性质: 树中有一个称为“根(Root)”的特殊结点,用r表示; 其余结点可分为m(m>0)个互不相交的有限集合T1、T2...Tm,其中每个集合本身又是一棵树,称
阅读全文
摘要:Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given s
阅读全文
摘要:本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrTo
阅读全文
摘要:Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6,
阅读全文
摘要:设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空
阅读全文
摘要:本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementTyp
阅读全文