转自博客:https://blog.csdn.net/u011541946/article/details/80166648
本篇先来了解两种数据结构,什么是栈,什么是队列它们各自的特点,然后利用LinkedList来分别用代码模拟两种数据结构的特点。
1、什么是栈
之前,我们画内存图,接触了栈内存和堆内存,并没有解释什么是栈。栈是一种数据结构,有一个鲜明的特点,先进后出。先进后出,生活中有很多这样例子。例如袋装的切片面包,第一个切片肯定是先放入,如果用户不破坏包装结构,最底层的切片是最后被取出,这就是先进后出。
2、什么是队列
队列和栈相反,特点是先进先出。例如在一个管道中的流动的水,只有管道前面的水从另外一侧流出,后面的水才能继续流出。如果发生堵塞,前面水出不去,后面的也出不去,必须是先进先出的效果。
3、LinkedList模仿栈的出栈和入栈
我们在一个包下,写两个文件,一个是封装相关方法的Stack.java,另外一个是测试类。
package list; import java.util.LinkedList; public class Stack { private LinkedList list = new LinkedList(); //模拟进栈 public void in(Object obj) { list.addLast(obj); } //模拟出栈 public Object out() { return list.removeLast(); } //判断是否为空 public boolean isEmpty() { return list.isEmpty(); } }上面实际还是利用LinkedList的添加尾部元素和删除尾部元素的方法来实现先进后出功能。
package list; public class Demo1_LinkedList { public static void main(String[] args) { Stack s = new Stack(); //模拟进栈 s.in("a"); s.in("b"); s.in("c"); s.in("d"); while(!s.isEmpty()) { // 为空判断,不为空就弹栈 System.out.println(s.out()); //模拟弹栈 } } }输出: d c b a
4、LinkedList模仿队列操作
还是和上面一样,写两个类文件。封装一个队列Queue.java
package list; import java.util.LinkedList; public class Queue { private LinkedList list = new LinkedList(); //模拟队列的进 public void in(Object obj) { list.addLast(obj); } public boolean isEmpty() { return list.isEmpty(); } //模拟队列的出 public Object out() { return list.removeFirst(); } }写一个测试类
package list; public class Demo1_LinkedList { public static void main(String[] args) { Queue q = new Queue(); q.in("a"); q.in("b"); q.in("c"); q.in("d"); while(!q.isEmpty()) { System.out.println(q.out()); } } }输出:
abcd