队列与栈

题单介绍

队列是生活中常见的数据结构。 比如去食堂吃饭要排队,进出校门要排队,上厕所要排队…… 所谓排队,就是按照先来后到的顺序,先来的先出队列,后来的后出队列。(所以出操排队不是队列,而是排序) 每次有人进队都是在队列的尾部进入,出队则是在队列头部出去。 在程序里,我们就可以用一个数组来记录队列里的元素。然后用head和tail两个变量来记录队首和队尾的位置。 ```cpp int queue[100]; int head,tail; void push(int x){//元素x入队 queue[tail]=x; tail++; } void pop(){//队首元素出队 head++; } int front(){//查询队首元素 return queue[head]; } ``` 而与队列的先进先出相对应的,就是后进先出,也就是最后进来的元素最先出去。我们把这种数据结构叫做栈。 不同于队列在生活中使用的更多,栈在生活中并不是非常常见。一般在一些空间比较小,只有一个出入口的地方会用到栈。比如米缸,最先倒进去的米最后被拿出来。 在程序运行时经常会用到栈,而不是队列。比如递归函数就是栈的应用。后调用的函数最先执行完。 在栈中,每次入栈或出栈一个元素,都是在栈顶。 ```cpp int stack[100]; int tp; void push(int x){//元素x入栈 stack[tp]=x; tp++; } void pop(){//栈顶元素出栈 tp--; } int top(){ return stack[tp-1]; } ```

题目列表

  • 约瑟夫问题
  • 表达式括号匹配
  • 后缀表达式
  • [NOIP 2013 普及组] 表达式求值
  • [NOIP 2003 普及组] 栈