
数据结构
~inspire
纵有疾风平地起 我亦乘风破万里
展开
-
数独问题
数独题目:数独(shù dú)是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行...原创 2020-01-28 20:56:14 · 972 阅读 · 0 评论 -
八皇后——递归实现
八皇后题目:八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。问题分析:简单的说问题就是,在8×8格的棋盘中要求同行同列同斜线不能有重复的皇后棋子,问多少种摆法。用递归的方法实现,递归就像找文件一样...原创 2020-01-28 14:40:47 · 980 阅读 · 5 评论 -
汉诺塔问题
汉诺塔问题题目:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。问题分析:...原创 2020-01-28 14:39:12 · 555 阅读 · 0 评论 -
数据结构与算法(十一)递归
递归什么是递归?程序调用自身的编程技巧称为递归(recursion)。递归作为一种算法在程序设计语言中广泛使用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转换为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少程序的代码量。递归的能力在于用有限的语句来定义对象的无线集合。一般来说...原创 2020-01-28 13:02:18 · 231 阅读 · 0 评论 -
魔术师发牌问题
魔术师发牌问题题目:魔术师利用一副牌中的13张黑牌,预先将它们排好后叠放在一起,牌面朝下。对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数,你们听,不信?现场演示。”魔术师将最上面的那张牌数为1,把他翻过来正好是黑桃A1,将黑桃A放在桌子上,第二次数1,2,将第一张牌放在这些牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上这样依次进行将13张牌全部翻出,准确无误。问...原创 2019-12-23 00:10:15 · 402 阅读 · 0 评论 -
约瑟夫环升级版
约瑟夫问题升级版题目:编号为1~N的N个人按顺时针方向围坐一圈,每个人持有一个密码(正整数,可以自由输入),开始人选一个正整数做为报数上限值M,从第一个人按顺时针方向自1开始顺序报数,报到M时停止报数。报M的人出列,将他的密码作为新的M值,从他顺时针方向上的下一个人开始从1报数,如此下去,直到所有人出列为止。...原创 2019-12-20 21:48:59 · 398 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题题目:问题分析:问题中41个人排成一圈,报数每报到第三个人该人必须自杀,把41个人看成一个链表,而且是一个单向循环链表,把每个人看做一个结点,其所在位置做为数据域position,每个人知道自己的下一个人是谁,为指针域。定义成员变量size记录剩余人数,接下来用结点的方式初始化该链表,用真实头结点方式来做,有多少人就创建多少结点,用循环方式。借助指针p遍历链表,p从第一个结点开始,...原创 2019-12-20 16:43:10 · 940 阅读 · 1 评论 -
数据结构与算法(十)循环链表
循环链表对于单链表,由于每个结点只存储了向后的指针,到了尾指针就停止了向后链的操作,将单链表中终端结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的链表就称为单向循环链表,简称循环链表...原创 2019-12-19 20:51:22 · 272 阅读 · 0 评论 -
数据结构与算法(九)链队列——队列的链式存储结构
链队列队列的链式存储结构,其实就是线性表的单链表,只不过它只能它只能尾进头出而已,我们把它就称之为链队列。既然链队列和单链表一样,观察链队列LinkedQueue和单链表LinkedList的UML类图,可以看到两者之间是聚合关系,也就说LinkedQueue相当于LinkedList的成员变量,和我们的之前说的链栈是一样的既然如此,也是创建LinkedList对象list实现,调用li...原创 2019-12-19 17:04:15 · 2777 阅读 · 0 评论 -
数据结构与算法(八)链栈——栈的链式存储结构
链栈栈的链式存储结构简称链栈,对链栈来说基本不存在栈满的情况,除非内存已经没有可以使用的空间链栈其实也是线性表的单链表,只不过它是只能栈顶进出元素(线性表的表尾),我们看一下单链表和链栈的UML类图,LinkedList与LinkedStack是聚合关系,聚合关系是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的...原创 2019-12-19 16:25:44 · 507 阅读 · 0 评论 -
数据结构与算法(七)单链表——线性表的链式存储结构
单链表数据在计算机中的存储形式有两种,顺序存储结构是把数据元素存放在地址连续的存储单元里,我们前面写的线性表、顺序栈、循环队列都是顺序存储结构,基于动态数组实现的,这个结构是占用连续的存储单元,比较浪费空间,把数据元素存放在任意的存储单元里,就可以充分的利用空间,这种存储结构就是链式存储结构。链式存储结构并不能反映数据元素之间的逻辑关系,因此需要 用一个指针存放数据元素的地址,这样地址就可以...原创 2019-12-18 23:33:01 · 676 阅读 · 0 评论 -
数据结构与算法(六)循环队列——顺序存储结构
循环队列先不急着给循环队列的定义,先看队列循环存储结构的弊端。队列顺序存储结构的弊端队列的顺序存储结构本身是由ArrayList实现的,在数据元素入队的时候,相当于在ArrayList表尾添加元素,在数据元素出队的时候,相当于在ArrayList表头删除元素。很明显,入队的时间复杂度O(1),出队的时间复杂度O(n),线性表增删数据元素时间复杂符都是O(n),但是这个是按平均算的。队列的出...原创 2019-12-17 19:35:17 · 529 阅读 · 1 评论 -
数据结构与算法(五)队列——顺序存储结构
队列队列的定义:是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。例如像移动,联通、电信等客服电话,客服人员与客户相比总是少数,在所以客服人员都占线的情况 下,客户被要求等待,直到某个客服人员空下来,才能让最先等待的客户接通电话,这里将所以当前拨打客服电话的客户进行排队处理。客服系统就是应用了队列这种数据结构。队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为...原创 2019-12-16 21:22:29 · 289 阅读 · 1 评论 -
数据结构与算法(四)双端栈——顺序存储结构
双端栈双端栈定义:是指将一个线性表的两端当做栈底分别进行进栈出栈操作。双端栈原创 2019-12-16 20:46:16 · 357 阅读 · 0 评论 -
数据结构与算法(三)栈——顺序存储结构
栈说到栈,学了面向对象就很了解,面向对象说过的主函数进栈,构造函数进栈、构造函数弹栈,都是在对栈的操作,比如我们主函数先进栈,构造函数再 进栈,我们无法先将主函数弹栈,只能等构造函数弹栈后,再操作。由此就可以得到栈的定义:栈是限定仅在表尾进行插入和删除操作的线性表。栈这种后进先出数据结构的应用是非常普遍的,例如子弹夹,最后进入弹夹的子弹总是最先射出去。我们把允许插入和删除的一端称为栈顶(to...原创 2019-12-13 22:52:07 · 261 阅读 · 0 评论 -
数据结构与算法(二)线性表——顺序存储结构
线性表线性表(list):零个或多个数据元素的有限序列。举个例子:一个班的小朋友,一个跟着一个排队,当中的每个小朋友都知道他前面的是谁,后面的是谁,如同一根线把他们串联起来。就可以称之为线性表。给了线性表的定义,分析一下线性表写哪些什么操作,从属性和行为两个方面分析:属性方面:int size 线性表的有效元素个数int capacity 线性表的最大容量E[] data...原创 2019-12-13 13:52:55 · 329 阅读 · 1 评论 -
数据结构与算法(一)逻辑结构、物理结构、时间复杂度
数据结构数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。为什么要学习数据结构?学习数据结构学习的是逻辑思维和抽象思维的能力。程序设计=数据结构+算法,底层和源码的开发更是离不开数据结构。想要学的更深入就要学习数据结构。什么是数据结构?数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。数据结构的逻辑结构与物理结构数据结构的...原创 2019-12-12 23:54:56 · 1036 阅读 · 0 评论