随笔分类 - 数据结构
摘要:数据结构栈(Stack)和队列(Queue)详解 本章讲解了两种特殊的线性表结构——栈和队列。读者要重点理解栈的“先进后出”原则和队列的“先进先出”原则,体会两种特殊的线性表结构的应用场景。 本章内容: 1. 栈(Stack)的概念和应用及C语言实现 2. 数据结构实践项目之进制转换器 3. 括号匹配算法及C语言实现 4. 队列(Queue):“先进先出”的数据结构 5. 数据结构实践项目之...
阅读全文
摘要:俄罗斯轮盘赌,想必很多人都听说过,一种残忍的赌博游戏。游戏的道具是一把左轮手枪,其规则也很简单:在左轮手枪中的 6 个弹槽中随意放入一颗或者多颗子弹,在任意旋转转轮之后,关上转轮。游戏的参加者轮流把手枪对着自己,扣动扳机:中枪或是怯场,即为输的一方;坚持到最后的即为胜者。 本节实践项目同轮盘赌类似,
阅读全文
摘要:之前接触到的链表都只有一个指针,指向直接后继,整个链表只能单方向从表头访问到表尾,这种结构的链表统称为 “单向链表”或“单链表”。 如果算法中需要频繁地找某结点的前趋结点,单链表的解决方式是遍历整个链表,增加算法的时间复杂度,影响整体效率。为了快速便捷地解决这类问题,在单向链表的基础上,给各个结点额
阅读全文
摘要:链表的使用,还可以把链表的两头连接,形成了一个环状链表,称为循环链表。 和它名字的表意一样,只需要将表中最后一个结点的指针指向头结点,就形成了一个环。 图1 循环链表 循环链表和动态链表相比,唯一的不同就是循环链表首尾相连,其他都完全一样。 实际应用:约瑟夫环问题 约瑟夫环问题,是一个经典的循环链表
阅读全文
摘要:本节继续介绍线性表的另外一种链式表示——静态链表。(前面介绍的链表称为 动态链表 )。逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成的链表称为静态链表。 静态链表和动态链表的区别:静态链表限制了数据元素存放的位置范围;动态链表是整个内
阅读全文
摘要:逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着。恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储。 由于分散存储,为了能够体现出数据元素之间的逻辑关系,每个数据元素在存储的同时,要配备一个指针,用于指向它的直接后继元素,即每一个数据元素都指向下一个
阅读全文
摘要:逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构。 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间不存在空隙,这样的存储结构称为顺序存储结构。 使用顺序存储结构存储的数据,第一个元素所在的地址就是这
阅读全文
摘要:本章讲解了最基本的数据结构——线性表。从逻辑上讲,线性表中的数据是依次排列的,就像小学生排队过马路一样,彼此手拉手,每份数据的前面和后面各有一份数据,从整体上看连成了“一条线”。 线性表的概念:1分钟了解什么是线性表 线性表是数据结构中最简单的数据存储结构,可以理解为“线性的表”。线性,是说数据在逻
阅读全文
摘要:算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同,但是耗费的时间和资源是不同的。 就比如要拧一个螺母,使用扳手还是钳子是有区别的,虽然使用钳子也能拧螺母,但是没有扳手好用。“条条大路通罗马”,解决问题的算法有多种,这就需要判断哪个算法“更好”。 算法VS程序 很多人误以为程序就
阅读全文
摘要:本节开始将带领大家系统地学习数据结构,作为一门计算机专业大二学生的必修课程,该课程面对的目标人群为初步具备基本编程能力和编程思想的程序员(大一接触了 C 语言或者 C++)。通过系统地学习数据结构,可以提高程序员分析问题和解决问题的能力。 首先,先来揭开数据结构的神秘面纱,看看什么是数据结构。 数据
阅读全文