![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 68
小葫芦写代码
c>c++>java,嵌入式开发,多媒体开发(ffmpeg/gstreamer)、android开发
展开
-
哈希相关及C语言实现
散列(哈希): 是在记录的存储位置和它的关键字之间建立一个确定的映射关系f,使得每个关键字key对应一个存储位置(参考大话数据结构8.9-8.12)。 存储位置=f(key)f称为散列函数,又称为哈希函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表。 哈希是用来解决查找与给定值相等的位置。 设计一个简单、均匀、存储利用率高的散列函数是散列技术中最关键的问题。 散列冲突:两个key1 != key2,但是f(key1) =...原创 2021-05-02 19:50:59 · 828 阅读 · 0 评论 -
哈夫曼树/哈夫曼编码
哈夫曼树(大话数据结构6.12对哈夫曼树及哈夫曼编码讲的不错):相关概念:1.路径长度:树中两个节点间的分支数目称为路径长度。2.树的路径长度是根节点到其他所有节点的路径长度之和。3.节点的带权路径长度:该节点到根节点之间的路径长度与节点上权重的乘积。4.树的带权路径长度(WPL):树中所有叶子节点的带权路径长度。带权路径长度WPL最小的二叉树称作哈夫曼树(带权路径长度最小)。哈夫曼树构造方法:1.将权值节点排序,取最小的权值的两个节点作为左右节点(左节点为最小权值),生成一颗..原创 2021-04-18 14:05:06 · 1583 阅读 · 0 评论 -
二叉树相关/根据前序、中序确定二叉树
树相关概念(参考大话数据结构):树是一对多的数据结构。根节点:一个树中只有一个根节点(root)。子树:节点的子树数量是指与它相邻的(而不是节点下面所有的)下一层有几个节点。度:节点拥有的子树数量称为节点的度(Degree)。树的度是指树内所有节点度的最大值。度为0的节点称为叶节点或终端节点。度不为0的节点称为非终端节点或分支节点。深度:是指树的高度,有几层。将树中节点的各子树看成从左到右是有次序的,不能互换的,称该树为有序树,否则为无序树。森林是m(m>=0)棵互不相交的树的集合。对于树中原创 2021-04-18 14:00:35 · 5913 阅读 · 2 评论 -
栈的应用--四则运算表达式求值
本文基于上篇文章-C语言单链表实现栈(stack)数据结构,使用数据结构栈做一个四则运算的应用。四则运算的讲解部分在大话数据结构4.9节有清晰的阐述,但是这节很遗憾没有代码实现,所以本文基于栈的数据结构完成四则运算的代码实操。 问题的难点在于,如果使用普通的逻辑,当字符串的运算处理不能按照从左到右处理时(比如括号或者乘除运算在加减的后面),计算会很痛苦。而书中介绍的方式是按照四则运算的优先级重新排列字符串(中缀->后缀),之后按照顺序依次计算。中缀表达式(就是我们输入...原创 2021-03-27 11:28:01 · 478 阅读 · 0 评论 -
C语言单链表实现栈(stack)数据结构
栈1.栈是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。2.栈是先进后出(LIFO)结构。3.栈的插入叫进栈/压栈Push,删除称为出栈Pop。4.使用链表来完成栈,栈需要一个栈顶指针,正好和单链表头指针功能重合。5.让头指针指向栈顶,这样push、pop都很方便,使用单链表(不用循环链表)就可以很轻松完成队列,不需要循环,push,pop的时间复杂度都是O(1)。如果指向栈底,push、pop每次都要遍历到栈顶,时间复杂度O(原创 2021-03-27 11:17:06 · 1766 阅读 · 1 评论