栈、队列

题单介绍

学到这里大家可以放松一下了,栈和队列都不是很难的知识点~ 建议大家先看看网课再来做题哈。 前四题是**栈**,最后一题是**队列**。 同学们看过网课之后就可以挑战人生第一道蓝题喽! > 我的做法使用了结构体、枚举等语法知识,感觉比较规范化,同学们可以看看我的代码( 抱歉我刚发现只有一道题通过以后才能看别人的代码……我就把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; } ``` 注意:以上的写法是**面向做题**的简易数组写法,比较浪费空间但是不容易出错,足够做题使用。在要求更高的场景可以使用链表写法~

题目列表

  • 日志分析
  • 表达式括号匹配
  • 【深基15.习9】验证栈序列
  • 表达式的转换
  • [NOIP 2016 普及组] 海港
  • 兔兔食堂