算法精解(C语言实现)
文章平均质量分 61
复习数据结构方面知识,另外做一个总结。
孟一
随意
展开
-
算法精解(八):C语言描述(堆)
1.堆的概念和作用 堆是一种树形结构,能够让人快速的确定最大值或最小值的节点,也就是数据。并且一棵树的代价是小于一个有序数组的代价的。堆是一颗二叉树,通常其子节点存储的值比父节点的值小(最大值堆,根节点数据最大),最小值堆(根节点数据最小)时,则情况相反。这样的二叉树是局部有序的,任何一哥节点与其兄弟节点之间都没有必然的顺序关系,但它与其父子节点有大小顺序关系。 堆是左平衡(一颗平衡...原创 2019-03-17 22:25:29 · 329 阅读 · 0 评论 -
算法精解(九):C语言描述(优先队列)
1.优先队列的理解和概念 优先队列将数据按照优先级顺序排列。一个优先队列有许多有序的元素组成,所以可以快速的确定优先级最高的元素。 优先队列能通过多种方式来实现,最简单是用一个有序数据集(数组,链表),此时数据集中优先级最高的元素位于数据集的头部。但是每次插入或提取元素后,必须重新排序数据集,复杂度为n。更加有效的方法是由堆来实现,相同的操作复杂度为lg n。因此可以通过ty...原创 2019-03-18 21:23:06 · 372 阅读 · 0 评论 -
算法精解(七):C语言描述(二叉搜索树)
二叉树搜索树概念 二叉搜索树是由二叉树组成的专用于查找和搜索的一种数据结构。需要在二叉树中查询一个节点,从根节点开始一层层往下查找,直到找到目标节点为止。当遇到一个比目标节点值大的节点时,顺着该节点的左子树继续查找。如果遇到的节点值小于目标节点,则顺着该节点的右子树继续查找。(左分支的数,一定小于右分支的数,个人觉得类似二分查找) 二叉搜索树是一种用于查找操作的高效数据结构,最坏情况...原创 2019-03-11 22:07:53 · 164 阅读 · 0 评论 -
算法精解(六):二叉树
1.二叉树理解 二叉树是一种将结点按照层次结构组织起来的数据结构,每个结点最多只有两个与它直接关联的子节点。类似于细胞分裂一样,1->2,2->4,4->8........ 2.树的周游算法 先序遍历:1,访问根节点,2.左节点,3.右节点-------------------------属于深度优先遍历 中序遍历: 1.访问左节点,2.根节...原创 2019-03-06 23:44:56 · 203 阅读 · 0 评论 -
算法精解(五):哈希表
1.个人理解 关于哈希表,通过看书与资料,有了一些自己的理解。 我更喜欢将哈希表比作是一个二维数组void chtbl[type][N] 同一数据类型的数据存储在一个一维数组里面,type表示不同类型的数据类型。 比如圆形,方形,心形,六边形代表四种类型的框,如果一个物体数据某种类型, 则将该物体放入对应的框中。而N则代表相应数据类型的个数, 而如何辨别该物体是什么形状,则需要一套方法...原创 2019-02-25 22:39:09 · 248 阅读 · 0 评论 -
算法精解(四):C语言描述(栈与队列)
1.栈 栈的特点:后进先出(LIFO)。 C中,栈有两种实现方式。1,顺序栈(线性表形式,如数组)。2,链栈(链表形式) 代码实现: ////////////////顺序栈 #define Stack_MAX 100 typedef struct Stack1 { int data[Stack_MAX]; //数据 int top; //游标 }...原创 2019-03-04 21:51:13 · 184 阅读 · 0 评论 -
算法精解(三):C语言描述(链表常见问题)
1.如何判断两个单链表是否相交,如果相交,找出交点(两个链表都不存在环) 如果两个单链表相交,那应该呈“Y”字形,则交点之后的节点是相同的。 所以判断是否相交,只需看两个链表的最后一个节点是否为同一个即可。 假设两个单链表的长度分别为L1、L2(L1 > L2),则(L1-L2)的值就是交汇之前两个链表的长度差; 因此,只有让更长的链表先走L1-L2步,然后两个链表开始一起走,如果某...原创 2018-12-26 15:15:59 · 322 阅读 · 0 评论 -
算法精解(二):C语言描述(循环链表)
循环链表 顾名思义,首尾相连的链表即是循环链表。可以是单链表,也可以是双链表。 循环链表是另一种形式的链表,它提供了更为灵活的遍历链表元素的能力。循环链表可以是单向的或双向的,但区分一个链表是不是循环链表只要看它有没有尾部元素即可在循环链表中,最后一个元素的nex指针又指回头元素而不是设置为NULL。在双向循环链表中,头元素的prev指针则指向最后一个元素,这使得循环链表中的...原创 2018-11-20 21:21:53 · 196 阅读 · 0 评论 -
算法精解(一):C语言描述(链表)
1.链表认知 一场病,断了好久。这几天算是基本没什么问题了。是时候继续了。 链表我想可以认为是,点到线的过程。 一个个点就是一个个链表的节点,以特定的顺序组合或链接后,行成了一条线,即链表。所以添加,删除一个点是相对较容易的(因为可以动态的追加,删除节点),但是查找某个点相对较麻烦(数组中只需要a[i]即可取得数据,链表则需要遍历)。所以,对于未知大小长度的数据来说,具有相当的优势。但已知...原创 2018-11-19 22:16:52 · 652 阅读 · 0 评论 -
算法精解:C语言描述(递归)
算法精解真的是一本不错的书,虽然我真的不是很喜欢看书,但是不知不觉间就看完了6单元。里面对每一模块的具体代码实现和分析,写的非常透彻。初入CSDN,也是决定要好好学习一波,自此开始好好记录自己学习的一步步脚印和一次次的失败。不知道能坚持多久,但希望能久一些。 1.递归的认知。 不知大佬对递归的理解是如何的,在我看来递归像是一个悠悠球。当达到某个临界点时,在原路返回。 其实悠悠球就是递...原创 2018-10-16 20:41:36 · 615 阅读 · 0 评论