![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 64
V明亮
这个作者很懒,什么都没留下…
展开
-
为什么引入“平衡二叉树”
转自:http://www.cnblogs.com/Clingingboy/archive/2010/10/08/1845854.html http://www.cnblogs.com/abatei/archive/2008/11/17/1335031.html 为什么引入“平衡二叉树” 平衡二叉树的定义 AVL树的平衡因子(数据结构的关键点) AVL树原创 2013-08-02 11:57:04 · 1214 阅读 · 0 评论 -
数据结构学习笔记(1.大O表示法和顺序表)
最近在看国嵌唐老师的数据结构视频,觉得还不错,所以就把笔记记录下来 本节知识点: 1.数据之间的逻辑结构: 集合结构:数据元素之间没有特别的关系,仅同属相同集合 线性结构:数据元素之间是一对一的关系 树形结构:数据元素之间存在一对多的层次关系 图形结构:数据元素之间是多对多的关系 2.数据之间的物理结构 顺序存储结构:将数据存储在地址连续的存转载 2013-09-10 14:58:29 · 692 阅读 · 0 评论 -
柔性数组
处理二进制协议时,过去常用的方法是,只定义协议头,或者用char data[1]定义协议体 只定义协议头不够直观,需要计算协议体地址;而data[1]需要进行类型转换,其实也是计算协议体地址 现在发现有一种更“优雅”的方法:柔性数组,可以这样定义: struct protocol { uint32_t len; uint32_t type; uint16_t转载 2013-09-10 16:29:53 · 488 阅读 · 0 评论 -
数据结构学习笔记(3.线性表之静态链表及柔性数组)
本节知识点: 1.静态链表到底是什么:链表就是链式存储的线性表,但是它分为动态和静态两种,所谓动态就是长度不固定,可以根据情况自行扩展大小的,静态链表就是长度大小固定的,链式存储的线性表。 2.本节的静态链表和顺序表很像(其实和数组也很像),准确的来说就是利用顺序表实现的,只是这个顺序表,不是顺序排列的,是通过一个next变量,连接到下一个变量的。 如图: 3.唐老师说静态链表是在转载 2013-09-10 16:44:00 · 678 阅读 · 0 评论 -
数据结构学习笔记(4.线性表之双向链表)
本节知识点: 1.为什么选择双向链表:因为单向链表只能一直指向下一个链表元素,不能获得前一个元素,如果要进行逆序访问操作是极其耗时的,所以引入双向链表。 2.双向链表的结构:在单向链表的基础上增加了一个链表结构pre,如图。 注意:链表第一个元素的前驱pre不是指向头结点head,而是指向NULL,链表尾结点的后继next指向NULL 3.如何将一个单向链表改成双向链表: 第一转载 2013-09-10 17:28:11 · 555 阅读 · 0 评论 -
从无头单链表中删除节点及单链表的反转操作
问题描述:假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除。 一般链表的删除需要顺着头结点向下找到当前待删节点的前驱节点,然后让前驱节点指向后驱节点就行了。这里,没有头结点,就没办法找到前驱结点。但我们可以采用“狸猫换太子”的做法。我们把当前结点“看成”是前驱结点,把后续节点当做待删结点删除(删除之前,记下后续结转载 2013-09-10 15:50:12 · 1298 阅读 · 0 评论 -
数据结构学习笔记(2.线性表之单链表)
线性表有两种:一种是顺序存储的叫顺序表,上节已经说过了,另一种是链式存储的叫链表,本节说的是单链表,即单向链表(每个节点中只包含一个指针域)。 本节知识点: 1.链表的好处:对于动态链表,可以对未知数据量的数据进行存储。插入和删除比顺序表方便的多,不用大量移动。 链表的缺点:除了数据信息,还需对额外的链表信息进行分配内存,占用了额外的空间。访问指定数据的元素需要顺序访问之前的元素。转载 2013-09-10 15:23:01 · 598 阅读 · 0 评论 -
平衡二叉树 AVL
C#与数据结构--树论--平衡二叉树(AVL Tree) 介绍 我们知道在二叉查找树中,如果插入元素的顺序接近有序,那么二叉查找树将退化为链表,从而导致二叉查找树的查找效率大为降低。如何使得二叉查找树无论在什么样情况下都能使它的形态最大限度地接近满二叉树以保证它的查找效率呢? 前苏联科学家G.M. Adelson-Velskii 和 E.M. Landis给出了答案。他们在1962年发表转载 2013-08-02 16:46:45 · 645 阅读 · 0 评论 -
平衡二叉树 AVL 实现(3)
转自:http://www.cnblogs.com/Clingingboy/archive/2010/10/09/1846865.html AVL树节点的删除规则 三种现象 现象1 注意:q是30,而不是20,因为删除了25,节点会移动,以下现象均遵循此规律 现象2 现象3 现象1和现象2比较简单,不需要平衡化处理,现象3则比较复杂.先讨论现象1和2 现象1删原创 2013-08-02 12:07:59 · 490 阅读 · 0 评论 -
平衡二叉树 AVL实现(2)
转自:http://www.cnblogs.com/Clingingboy/archive/2010/10/08/1846203.html 继续讨论旋转 为了方便讨论是做点记号 X为插入的节点 P为旋转轴(P有时候为X的父节点如LL,RR旋转;P有时候也为X,如LR,RL旋转)R为平衡因子绝对值=2的节点 看下面四种情况 LL旋转 当三个节点处于一条直线,并均是左节点原创 2013-08-02 12:06:26 · 478 阅读 · 0 评论 -
快速排序
快排图 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用中间的数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2转载 2013-09-10 17:18:43 · 506 阅读 · 0 评论