(Stack)是一种基于后进先出(Last In, First Out,LIFO)原则的数据结构。在栈中,最后添加的元素是第一个被移除的,而最先添加的元素是最后被移除的。这就好比在一个堆叠的盘子上添加和移除盘子。

栈的主要操作包括压栈(Push)和弹栈(Pop):

  • 压栈(Push): 将元素添加到栈的顶部。

  • 弹栈(Pop): 从栈的顶部移除元素。

题目描述

实现一个栈,栈初始为空,支持四种操作:

  1. push x – 向栈顶插入一个数 x

  2. pop – 从栈顶弹出一个数;

  3. empty – 判断栈是否为空;

  4. query – 查询栈顶元素。

现在要对栈进行 M个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。

代码实现

#include <iostream>

using namespace std;
const int N = 1e5 + 10;

int stk[N], tt;

void push(int x)
{
  stk[++tt] = x;
}

int query()
{
  return stk[tt];
}

void pop()
{
  tt--;
}

bool empty()
{
  return tt == 0;
}

int main()
{
  int n;
  cin >> n;
  while( n -- )
  {
    string op;
    cin >> op;
    if( op == "push" )
    {
      int x;
      cin >> x;
      push(x);
    }else if( op == "pop" )
    {
      pop();
    }else if( op == "query" )
    {
      cout << query() << endl;
    }else {
      if ( empty() )cout << "YES" << endl;
      else cout << "NO" << endl;
    }
  }
  return 0;
}

队列

队列(Queue)是一种基于先进先出(First In, First Out,FIFO)原则的数据结构。在队列中,最先添加的元素是第一个被移除的,而最后添加的元素是最后被移除的,类似于在排队等待服务的过程。

队列的主要操作包括入队(Enqueue)和出队(Dequeue):

  • 入队(Enqueue): 将元素添加到队列的尾部。

  • 出队(Dequeue): 从队列的头部移除元素。

队列的特性使得它在某些场景中非常有用,例如任务调度、广度优先搜索(BFS)等。

题目描述

实现一个队列,队列初始为空,支持四种操作:

  1. push x – 向队尾插入一个数 x

  2. pop – 从队头弹出一个数;

  3. empty – 判断队列是否为空;

  4. query – 查询队头元素。

现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。

代码实现

#include <iostream>

using namespace std;
const int N = 1e5 + 10;

int q[N], hh;
int tt = -1;

int main()
{
  int n ;
  cin >> n;
  while ( n -- )
  {
    string op;
    cin >> op;
    if ( op == "push" )
    {
      int x;
      cin >> x;
      q[++tt] = x;
    }else if( op == "query" )
    {
      cout << q[hh] << endl;
    }else if( op == "pop" )
    {
      hh++;
    }else {
      if ( hh <= tt ) cout << "NO" << endl;
      else cout << "YES" << endl;
    }
  }
  return 0;
}