用集合实现模仿 栈和队列

    xiaoxiao2023-09-28  163

    转自博客: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

    最新回复(0)