数据结构与算法
整理工作中常用的各类数据结构和算法
BerryRobot
士必有坚韧不拔之志,才有坚韧不拔之力
展开
-
链表原理详解及其实现
什么是链表?链表,顾名思义,是一条相互链接的数据节点表。每个节点由两部分组成:数据和指向下一个节点的指针。链表的基本结构如下图所示: 一般来说,链表的头结点不存放具体的数据,所以也被称为哑节点(dummy node)。原因在于这样可以比较好地区分链表的头结点,而且可以大大简化链表的各种操作,避免很多不必要的边界讨论。链表的种类单向链表 双向链表 循环链表 多向表(网状表)链表的优缺点这里的优缺原创 2016-03-21 21:53:14 · 14754 阅读 · 1 评论 -
栈原理详解及其应用实现
什么是栈栈是一种特殊的表。我们可以把栈形象地想象成一个木桶:你可以往木桶里存放物品,也可以从木桶里拿取物品。但是每次你只能对木桶顶部的物品进行操作,而无法直接操作木桶底部的物品,除非你把位于其上的所有物品全部取出。 栈的作用栈的用处很大,下面列举几个主要的应用场合: 1.保存函数调用的参数值; 2.符号匹配([ ], { }, ( )); 3.后缀、中缀表达式的解析。 总之,栈在底层的编译原创 2016-03-22 16:09:44 · 1072 阅读 · 0 评论 -
队列原理详解
队列是什么队列也是一种特殊的表(list)。表通常分为三种: 1.链表(linked list):随机插入,随机删除; 2.栈(stack):先进后出(FILO); 3.队列(queue):先进先出(FIFO)。 可以把队列想象成排队的队伍。显然,最先排队的人最先得到服务,然后离开队伍;队尾不断有其他人加入。队列正是模拟了现实世界的这一普遍情景。 队列的作用队列在网络、消息传递、图论中的应原创 2016-03-22 20:02:43 · 3082 阅读 · 0 评论 -
生成区间内互不重复的随机数序列
问题描述给定一个区间[b, e),生成n个位于该区间内互不重复的随机数序列(n<=e-b)算法思路首先可以想到的是,每次生成一个[b, e)内的随机数,然后判断该随机数是不是已经生成过:没有生成就将其加入随机数序列中;否则丢弃。显然这个算法效率很低,而且没有办法确定算法的运行时间。 更好的方法是“筛选法”: 1.将[b,e)区间内的数读入一个数组A; 2.生成[0, A.size)内的一个随机原创 2016-03-15 16:20:06 · 1332 阅读 · 0 评论