递归的概念 简单的说:递归就是方法调用自己,每次调用传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁 两个案列说明递归的调用机制 123456789101112public class Demo1 { public static void main(String[] args) { test(4); } public static void test(int n){ if(n>2){ test(n-1); }//else{加上else输出结果又是怎么样呢! System.out.println("n="+n); //} }} 建议先自己分析一下这个运行结果是啥! 然后在idea里面编译运行看一下结果,是不是和你想的一样。 递归调用的规则: 1.当程序执行到一个方法时,就会开辟一个独立的空间(栈 ) 2.就像上面的案例,当 ...
单向链表 链表(Linked List)介绍 链表在内存中的存储 特点 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域 和 next 域。next域用来指向下一个节点 链表的各个节点不一定是连续存储的 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 带头结点的单列表逻辑示意图 单向链表的优缺点 和普通的线性结构(如数组)相比,链表结构有以下特点: (1)单个结点创建非常灵活,普通的线性内存通常在创建的时候就需要设定数据的大小 (2)结点的删除、插入非常方便,不需要像线性结构那样移动剩下的数据 (3)结点的访问方便,可以通过循环或者递归的方法访问到任意数据,但是平均的访问效率低于线性表 实现思路(实现链表的增删改查) 创建(添加) 先创建一个Head头节点,表示单链表的头 后面我们每添加一个节点,就放在链表的最后 遍历 通过一个辅助变量,来遍历整个链表 有序插入 先遍历链表,找到应该插入的位置 要插入的节点的next指向插入位置的后一个节点 插入位置的前一个节点的next指向要插入节点 插入前要判断是否在队 ...
循环队列是 队列的一种特殊形式。首先介绍队列,然后引申出循环队列。 队列又称为“先进先出”FIFO线性表 限定插入操作只能在队尾进行,而删除操作只能在队首进行 队列也可以采用顺序存储结构或链表结构来实现,分别称为顺序队列和链队列 队列的顺序表示—顺序队列 用一组连续的存储单元依次存放从队首到队尾的元素,附设两个指针 head 和 tail 分别指向队首元素和队尾元素的位置, (有的地方用 front 和 rear 表示) 当 head = tail = 0 时表示空队列 当插入新元素到队尾时,tail 加 1 当删除队首元素时,head 加 1,上图如果把 C 也删掉,那么就 head = tail 了 tail 始终指向队列元素的下一个位置 对应的操作: 队空:head=tail 求队长:tail - head 入队:新元素按 tail 指示位置加入,再将队尾指针加 1 ,即 tail = tail + 1 出队:将 head 指示的元素取出,再将队头指针加 1,即 head = head + 1 下面引入循环队列 入队,tail 指针变化: >tail = (t ...