栈 Stack
- 栈是一种线性结构
- 相比数组,栈对应的操作是数组的子集
- 只能从一端添加元素,也只能从同一端取出元素(添加删除都在栈顶执行)
- 栈是一种后进先出的数据结构
栈的应用
无处不在的Undo操作(撤销操作)
程序调用的系统栈(子过程子逻辑调用的机理递归调用)
括号匹配-编译器
栈的实现
以java为例
Stack<E>
void push (e)
E pop()
E peek()
int getSize()
boolean isEmpty()
栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素
//栈的应用在字符匹配上这是leetcode中的一道题,借鉴了别人的代码
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0 ; i < s.length() ; i ++){
char c = s.charAt(i);
if(c == '(' || c == '[' || c == '{')
stack.push(c);
else{
if(stack.isEmpty())
return false;
char topChar = stack.pop();
if(c == ')' && topChar != '(')
return false;
if(c == ']' && topChar != '[')
return false;
if(c == '}' && topChar != '{')
return false;
}
}
return stack.isEmpty();
队列 Queue
- 队列是一种线性结构
- 相比数组,队列对应的操作是数组的子集
- 只能从队尾添加元素,也只能从队首取出元素
- 队列是一种先进先出的数据结构(先到先得)
队列的实现
Queue<E>
int getSize();
boolean isEmpty();
void enqueue(E e);
E dequeue();
E getFront();
数组队列与循环队列
font = = tail 队列为空 tail+1==front 队列满
循环队列比数组队列更节约时间。