一、特点
栈:先进后出
队列:先进先出
二、实现
栈
C++
#include<stack>
stack<type> StackName;
StackName.empty()
StackName.top()
StackName.pop()
StackName.push(type)
StackName.size()
java
import java.util.Stack; //引用栈
//初始化
Stack<Integer> stack = new Stack<Integer>();
//进栈
stack.push(Element);
//出栈
stack.pop();
//取栈顶值(不出栈)
stack.peek();
//判断栈是否为空
stack.isEmpty()
队列
C++
queue<int> que;
que.push(x);
que.size();
que.pop();
que.top();
que.empty();
java
Queue<Integer> queue=new LinkedList<>();
queue.offer();
queue.poll();
queue.isEmpty();
queue.peek();
三、Queue和Deque
队列(queue)是一种常用的数据结构,在Java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。
Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高。
双向队列(Deque) 全称为 double ended queue,是Queue的一个子接口,双向队列是指该队列两端的元素既能入队(offer)也能出队(poll),除此之外,其余特性则和父级 Queue 类似。如果将Deque限制为只能从一端入队和出队,则可实现栈的数据结构。对于栈而言,有入栈(push)和出栈(pop),遵循先进后出原则。
Deque 中定义的方法主要分为四部分,
- 第一部分就如 Deque 定义所言,提供两侧插入或删除的方法。
- 第二部分是继承自 Queue 的实现。
- 第三部分表示如果要基于此实现一个stack需要实现的方法。
- 最后一部分是继承自 collection 的方法。
此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。
每种方法都存在两种形式:
- 一种形式在操作失败时抛出异常。
- 另一种形式返回一个特殊值(null 或 false,具体取决于操作)。
- 插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。
//在队首添加元素
void addFirst(E e);
boolean offerFirst(E e);
//在队尾添加元素
void addLast(E e);
boolean offerLast(E e);
//删除队首元素
E removeFirst();
E pollFirst();
//删除队尾元素
E removeLast();
E pollLast();
//获取队首元素
E getfirst();
E peekFirst();
//获取队尾元素
E getLast();
E peekLast();
//删除第一个事件,大多数指的是删除第一个和 o equals的元素
boolean removeFirstoccurrence(object o);
//删除最后一个事件,大多数指的是删除最后一个和 o equals的元素
boolean removeLastoccurrence(object o);