转自博客: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());
}
}
}
输出:
a
b
c
d