前言
栈和队列相关概念
![](https://i-blog.csdnimg.cn/blog_migrate/f43c801c870265373375d30d12c1870b.png)
栈
:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈
:栈的插入操作叫做进栈/压栈/入栈
,入数据在栈顶。
出栈
:栈的删除操作叫做出栈
, 出数据在栈顶。
队列
:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)。
![](https://i-blog.csdnimg.cn/blog_migrate/c5304d7852d06cd8f7749c8f6b0af8d4.png)
一、栈(Stack)
1. 栈的简介
Stack 继承了 Vector
,Vector 和 ArrayList 类似,都是动态的顺序表,不同的是 Vector 是线程安全的。
![](https://i-blog.csdnimg.cn/blog_migrate/a3123851f3eda06686537984647885b6.png)
2. 栈的使用
2.1 栈的构造方法
方法 | 功能 |
---|---|
Stack() | 构造一个空的栈 |
2.2 栈的常用方法
方法 | 功能 |
---|---|
E push(E e) | 将e入栈,并返回e |
E pop() | 将栈顶元素出栈并返回 |
E peek() | 获取栈顶元素 |
int size() | 获取栈中有效元素个数 |
boolean empty() | 检测栈是否为空 |
示例:
public static void main(String[] args) { //Stack
Stack<Integer> stack=new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack.size()); //获取栈中有效元素个数
System.out.println(stack.peek()); //获取栈顶元素
System.out.println(stack.pop()); //栈顶元素出栈
if (stack.empty()){
System.out.println("栈空");
}
}
二、队列(Queue)
1. 队列的简介
Queue 是个接口,底层是通过链表实现的。
2. 队列的使用
Queue 是个接口,在实例化时必须实例化 LinkedList 的对象,因为 LinkedList 实现了 Queue 接口。
2.1 队列的常用方法
方法 | 功能 |
---|---|
boolean offer(E e) | 入队列 |
E poll() | 出队列 |
peek() | 获取队头元素 |
int size() | 获取队列中有效元素个数 |
boolean isEmpty() | 检测队列是否为空 |
示例:
public static void main(String[] args) { //Queue
Queue<Integer> queue=new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
queue.offer(4);
queue.offer(5);
System.out.println(queue.peek()); //获取队头元素
System.out.println(queue.poll()); //队头元素出队列
}