栈、队列
题单介绍
学到这里大家可以放松一下了,栈和队列都不是很难的知识点~
建议大家先看看网课再来做题哈。
前四题是**栈**,最后一题是**队列**。
同学们看过网课之后就可以挑战人生第一道蓝题喽!
> 我的做法使用了结构体、枚举等语法知识,感觉比较规范化,同学们可以看看我的代码(
抱歉我刚发现只有一道题通过以后才能看别人的代码……我就把5道题的源码贴在这里。
- [日志分析(Python3)](https://www.luogu.com.cn/paste/9ttk3uq9)
- [表达式括号匹配(C++)](https://www.luogu.com.cn/paste/ylaegky4)
- [验证栈序列(C)](https://www.luogu.com.cn/paste/4i348zg9)
- [表达式的转换(C)](https://www.luogu.com.cn/paste/sguaeupf)
- [海港(C)](https://www.luogu.com.cn/paste/lpu2pypt)
和上一次作业的数组和链表不同,栈和队列更像是一种**抽象**的数据结构,也就是使用的时候一般不太关心用哪种编程语言、用哪种方式来实现。更关心的是比较**抽象**的操作:
栈(Stack):
```
Push:从栈顶压入一个元素
Top:查看栈顶元素
Pop:从栈顶弹出一个元素
Empty:栈是否空
```
队列(Queue):
```
Push:从队尾插入元素
Front:查看队头元素
Pop:从队头弹出元素
Empty:队列是否空
```
当使用 C 语言编程的时候,一般有数组和链表两种具体的实现方式。
栈(stack)
```C
int stack[MAX];
int top = -1;
void Push(int item) {
stack[++top] = item;
}
int Top() {
return stack[top];
}
void Pop() {
top--;
}
int Empty() {
return top == -1;
}
```
虽然每个函数只有短短一句话,我还是建议封成函数来使用。
队列(Queue)
```C
int queue[MAX];
int rear = -1, front = 0;
void Push(int item) {
queue[++rear] = item;
}
int Front() {
return queue[front];
}
void Pop() {
front++;
}
int Empty() {
return rear - front == -1;
}
```
注意:以上的写法是**面向做题**的简易数组写法,比较浪费空间但是不容易出错,足够做题使用。在要求更高的场景可以使用链表写法~