![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DataStructure
文章平均质量分 71
wyq小白
one小白的成长记录
展开
-
汉诺塔问题
汉诺塔问题相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图).游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好.操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上.分析:对于这样一个问...原创 2019-12-28 21:40:16 · 187 阅读 · 0 评论 -
递归
一、递归的定义一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例如连加、连乘及阶乘等.简单的来说,程序反复调用自身即是递归.二、递归的使用递归是如何运作的?在这里我们用一张图片来展示一下.这是一个A函数递归调用自身的过程,因为递归是一个反复调用自身的过程,这就说明它每一级的功能都是一样的,因此我们只需要关注一级递归的解决过程即可...原创 2019-12-24 21:25:42 · 102 阅读 · 0 评论 -
数据结构——单向循环链表(GIF图解)
单项循环链表一、定义将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单向循环链表。(示意图如下)单向循环列表的实现的也是 list 的方法,在这里主要说一下插入元素和删除元素;插入元素的时候会遇到从表头插入、表尾插入和指定角标处插入,这些操作基本上和单链表的元素插入类似,但是需要注意的是从表头和表尾插入的时候,要考虑头指针和尾指针的移动,...原创 2019-12-20 22:42:58 · 4816 阅读 · 0 评论 -
数据结构——链队列(GIF图解)
一、链队列队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。为了操作上的方便,我们将队头指针指向队列的虚拟头结点的后一个结点,而队尾指针指向最后一个结点。二、链队列的实现创建一个链表实现queue的接口public class LinkedQueue<E> implements Queue<E> { private...原创 2019-12-20 19:35:01 · 3106 阅读 · 0 评论 -
数据结构——链栈(GIF图解)
一、链栈前面学习了栈的顺序存储结构,现在来看看栈的链式存储结构,简称链栈.(示意图如下)对于链栈来说,不存在栈满的情况,除非内存已经没有空间可以使用;但对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实是 top=null 的时候。二、链栈的实现...原创 2019-12-19 23:24:34 · 6559 阅读 · 1 评论 -
数据结构——动态链表(GIF图解)
一、链表的定义为了表示每个数据元素a1与其直接后继元素ai+1之间的逻辑关系,对数据元素a1来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域存储的信息称作链。这两部分信息组成数据元素ai的存储映像,称为结点。n个结点链结成一个链表,即为线性表的链式存储结构,因为此链表的每个结点中只包含一个指针域,所...原创 2019-12-19 11:39:25 · 7164 阅读 · 0 评论 -
数据结构——循环队列(GIF图解)
一、循环队列数组队列的出队操作的复杂度是O(n),性能很差,解决方法就是使用循环队列(Loop Queue)在循环队列中,需要对队为空和队为满的时候进行判断,为了区分队空和队满两个条件,需要浪费capacity一个空间,让rear指针一直指向一个空的位置;当 rear= =front 时,队为空;当 (rear+1)%n= =front (n为数字角标的最大值)时,队为满.示意图如下...原创 2019-12-17 10:29:20 · 3737 阅读 · 0 评论 -
数据结构——队列(GIF图解)
一、队列的定义队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表队列也是一种线性结构;队列是一种先进先出(First In First Out)的数据结构;队列的描述如下图:二、队列的实现先定义一个接口Interfacepublic interface Queue<E> extends Iterable<E>{ //获取队列中元素的个数 ...原创 2019-12-16 20:50:34 · 3196 阅读 · 0 评论 -
数据结构——双端栈(GIF图解)
一、双端栈定义双端栈是指将一个线性表的两端当做栈底分别进行入栈和出栈操作. 在顺序栈的共享技术中,最常用的就是两个栈共享,即双端栈。利用栈底位置不变,栈顶变化的特性。首先申请一个一维数组空间,data[n],将两个栈的栈低分别放在数组的两端,分别是0和n-1,由于是栈顶动态变化的,这样可以形成互补,使得每个栈可用的最大空间与需求有关,由此可见,两个共享栈比两个栈分别申请n/2哥空间利用率高。...原创 2019-12-15 11:19:47 · 2741 阅读 · 0 评论 -
数据结构——栈(Stack)(GIF图解)
一、栈的定义栈是限定仅在表尾进行插入和删除操作的线性表.二、 栈的特点栈也是一种线性结构;相比数组,栈所对应的操作是数组的子集;栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶";向栈中添加元素的过程,称之为"入栈",从栈中取出元素的过程称之为"出栈";栈的描述如下图:三、栈的实现...原创 2019-12-12 20:59:32 · 4007 阅读 · 1 评论 -
数据结构——线性表的顺序存储结构(GIF图解)
一、数组基础数组就是把数据码成一排进行存放。Java中,数组的每个元素类型必须相同,可以都为int类型,string类型,甚至是自定义类型。数组的命名要语义化,例如,如果数组用来存放学生的成绩,那么命名为scores就比较合适。索引(index)是数组中的一个重要概念,它是我们给数组中的每个元素分配的编号,从0开始,依次递增。如果数组中存放了n个元素,第一个元素的索引是0,最后一个元素的索...原创 2019-12-11 19:17:18 · 1515 阅读 · 0 评论