使用LinkedList实现Stack(栈)与Queue(队列)

首先引用JDK API中关于LinkedList的一句说明:"These operations allow linked lists to be used as a stack, queue, or double-ended queue."由此,可以得知,使用LinkedList可以轻松的实现栈和队列的功能。通过查看LinkedList源码实现,发现其底层采用双向链表实现。

一:使用LinkedList实现Stack

public class TestStack
{
 public static void main(String[] args)
 {
  MyStack ms = new MyStack();
  
  ms.push("aaa");
  ms.push("bbb");
  ms.push(new Integer(3));
  
  System.out.println(ms.peek());
  System.out.println(ms.pop());
  System.out.println(ms.isEmpty());
  System.out.println(ms.pop());
  System.out.println(ms.pop());
  System.out.println(ms.isEmpty());
 } 
}
 
   

public class TestStack
{
 public static void main(String[] args)
 {
  MyStack ms = new MyStack();
  
  ms.push("aaa");
  ms.push("bbb");
  ms.push(new Integer(3));
  
  System.out.println(ms.peek());
  System.out.println(ms.pop());
  System.out.println(ms.isEmpty());
  System.out.println(ms.pop());
  System.out.println(ms.pop());
  System.out.println(ms.isEmpty());
 } 
}

import java.util.LinkedList;

public class TestStack
{
    public static void main(String[] args)
    {
        MyStack ms = new MyStack();

        ms.push("aaa");
        ms.push("bbb");
        ms.push(new Integer(3));

        System.out.println(ms.peek());
        System.out.println(ms.pop());
        System.out.println(ms.isEmpty());
        System.out.println(ms.pop());
        System.out.println(ms.pop());
        System.out.println(ms.isEmpty());
    }
}

class MyStack
{
    //无论栈还是队列,里面都会维护一个成员变量,该成员变量用于存储栈或队列的元素,该成员变量使用LinkedList类型。
    private LinkedList list = new LinkedList();

    public void push(Object o)
    {
        list.add(o);
    }

    public Object pop()
    {
        return list.removeLast();
    }

    public Object peek()//查看栈顶元素
    {
        return list.getLast();
    }

    public boolean isEmpty()
    {
        return list.isEmpty();
    }
}

在Eclipse中的输出结果是:
--------------------------------------------------------------------------------

3
3
false
bbb
aaa
true

--------------------------------------------------------------------------------

二:使用LinkedList实现Queue

import java.util.LinkedList;

public class TestQueue
{
    public static void main(String[] args)
    {
        MyQueue mq = new MyQueue();

        mq.put("aaa");
        mq.put("bbb");
        mq.put(new Integer(3));

        System.out.println(mq.get());
        System.out.println(mq.isEmpty());
        System.out.println(mq.get());
        System.out.println(mq.get());
        System.out.println(mq.isEmpty());

    }
}

class MyQueue
{
    //无论栈还是队列,里面都会维护一个成员变量,该成员变量用于存储栈或队列的元素,该成员变量使用LinkedList类型。
    private LinkedList list = new LinkedList();

    public void put(Object o)
    {
        list.add(o);//this method is equivalent list.addFirst(o);
    }

    public Object get()
    {
        return list.remove();//or return list.removeFirst();
    }

    public boolean isEmpty()
    {
        return list.isEmpty();
    }
}

在Eclipse中的输出结果是:
-------------------------------------------------------------------------------

aaa
false
bbb
3
true

-------------------------------------------------------------------------------

时间: 2024-10-18 14:31:34

使用LinkedList实现Stack(栈)与Queue(队列)的相关文章

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构时,这些高级的数据结构可能给我们以迷惑. 比如,使用list实现queue的时候,入队操作append()时间复杂度可以认为是O(1),但是,出队操作pop(0)的时间复杂度就是O(n). 如果是想利用python学学数据结构的话,我觉得还是自己实现一遍基本的数据结构为好. 1.链表 在这里,我想使

Stack集合 Queue队列集合 Hashtable哈希表

Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 1 个数 2 Console.WriteLine(st.Count); 3 只要使用一次pop方法,就会从最后一个元素开始排除 弹出 4 Console.WriteLine(st.Pop()); 5 Console.WriteLine(st.Count); 6 只想查看不弹出 7 Console.WriteL

[LeetCode] Implement Queue using Stacks 用栈来实现队列

Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue. pop() -- Removes the element from in front of queue. peek() -- Get the front element. empty() -- Return whether the queue is empty. Notes: You

LeetCode 232 Implement Queue using Stacks(用栈来实现队列)(*)

翻译 用栈来实现队列的下列操作. push(x) -- 将元素x写入到队列的尾部 pop() -- 从队列首部移除元素 peek() -- 返回队列首部元素 empty() -- 返回队列是否为空 注意: 你必须使用一个只有标准操作的栈. 也就是说,只有push/pop/size/empty等操作是有效的. 栈可能不被原生支持,这取决于你所用的语言. 只要你只是用stack的标准操作,你可以用list或者deque(double-ended queue)来模拟栈. 你可以假设所有的操作都是有效的

[LeetCode] 232. Implement Queue using Stacks 用栈来实现队列

Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue. pop() -- Removes the element from in front of queue. peek() -- Get the front element. empty() -- Return whether the queue is empty. Notes: You

[CareerCup] 3.5 Implement Queue using Two Stacks 使用两个栈来实现队列

3.5 Implement a MyQueue class which implements a queue using two stacks. LeetCode上的原题,请参见我之前的博客Implement Queue using Stacks 用栈来实现队列.

两个栈模拟一个队列和两个队列模拟一个栈

此为网易的一道笔试题.到时候秀逗,不知所云.后来研究之后记录下,以备以后经常翻阅. 栈:先进后出 push和pop 队列:先进先出 offer和poll (1)两个栈模拟一个队列 即将先进后出实现先进先出.比较容易理解,只要所有数据先往一个栈里push,然后将该栈中的数据依次pop出来再push进第二个队列,则顺序自然颠倒过来了,则每次pop是从第二个队列中取数据. import java.util.*; public class StackQueue{ private Stack<Intege

.NET重思(三)-数组列表与数组的区别,栈集合和队列结合的区别

数组列表和数组十分相似,区别在于数组列表的容量是可以动态变化的,而数组的容量是固定的.数组即Array类,数组列表即ArrayList类,两者十分相似.不过,Array类在System命名空间下,ArrayList类在System.Collections命名空间下.数组在初始化时需要指定容量,并且指定之后无法改变,而数组列表可以动态的改变容量. //初始化ArrayList ArrayList lst = new ArrayList(); //初始化ArrayList并将容量设置为100 Arr

【C++】Stack类与Queue类学习

1.Stack类学习 1)建立stack<string> 2)调用push函数将数据压入栈中 3)调用size函数查看当前栈内元素数量 4)调用empty函数检测栈是否为空 5)如果不为空则不断调用pop函数将元素从栈中取出(后入先出) #include <iostream> #include <stack> using namespace std; int main() {     stack<string> stkNameList;     stkNam