21xrx.com
2025-04-13 09:21:14 Sunday
文章检索 我的文章 写文章
C++中的栈和队列:基础数据结构的实现及应用
2023-07-04 12:43:33 深夜i     94     0
C++ 队列 基础数据结构 实现 应用

栈和队列是C++中最基础的数据结构之一,它们在程序设计中的应用非常广泛。

栈是一种先进后出 (LIFO) 的数据结构,类似于一个装着物品的箱子,只有最上面一个物品可以被取出来。栈通常用于处理函数调用、表达式求值、括号匹配等问题。C++中可以使用STL中的stack模板来实现栈的操作,包括入栈(push)、出栈(pop)、是否为空(empty)等。

例如,我们可以使用stack来实现一个简单的括号匹配算法:

#include <iostream>
#include <stack>
using namespace std;
int main()
{
  string s = "{[()]}";
  stack<char> st;
  for (auto c : s)
  {
    if (c == '(' || c == '[' || c == '{')
      st.push(c);
    else
    {
      if (st.empty())
      
        cout << "不匹配" << endl;
        return 0;
      
      if ((c == ')' && st.top() == '(') ||
        (c == ']' && st.top() == '[') ||
        (c == '}' && st.top() == '{'))
        st.pop();
      else
      
        cout << "不匹配" << endl;
        return 0;
      
    }
  }
  if (st.empty())
    cout << "匹配" << endl;
  else
    cout << "不匹配" << endl;
  return 0;
}

队列是一种先进先出 (FIFO) 的数据结构,类似于排队等待服务的顾客。队列通常用于处理任务调度、消息传递、缓冲等问题。C++中可以使用STL中的queue模板来实现队列的操作,包括入队(push)、出队(pop)、是否为空(empty)等。

例如,我们可以使用queue来实现一个简单的任务调度算法:

#include <iostream>
#include <queue>
using namespace std;
int main()
{
  queue<int> q;
  q.push(1);
  q.push(2);
  q.push(3);
  while (!q.empty())
  {
    int x = q.front();
    q.pop();
    cout << x << " ";
  }
  cout << endl;
  return 0;
}

在实际程序设计中,栈和队列还可以和其他数据结构一起使用,比如栈可以和二叉树结合起来实现深度优先搜索,队列可以和图结合起来实现广度优先搜索。

总之,栈和队列是程序设计中非常重要的基础数据结构,掌握它们的应用可以让我们更好地处理实际问题。

  
  

评论区