实验报告-栈和队列

集美大学课程实验报告-实验3:栈、队列

项目名称 内容
课程名称 数据结构
班级 网安 2511
学号 202521336002
实验项目名称 栈和队列
上机实践日期 2026.04.02
上机实践时间 2学时

一、目的(本次实验所涉及并要求掌握的知识点)

  • 掌握STL中string的使用
  • 熟练掌握STL中栈(stack)和队列(queue)的基本使用
  • 掌握栈和队列的一些典型应用

二、实验内容与设计思想

题目1:栈的应用(符号配对)

相关伪代码

getline整行输入string类型的s
定义栈node
循环:
{
  char c=s[i]
  if (c找到'(','[','{')
    {
      node.push()
    }
     else if(c找到')',']','}')
        {
          判断:
          if(node.empty)
            {
                栈内没有匹配的符号,输出no并跳出循环
            }
          取栈顶元素top,为找到配对,cout<<top并cout<<no
          若匹配,弹出栈顶元素node.pop()
        }
}
if(node.empty)
  {
    全部匹配成功并弹出,cout<<yes;
  }else//失败
  {
    cout<<top<<endl;
    cout<<no;
  }

代码

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
    string s;
    getline(cin,s);//整行输入
    stack<char> node;
    for(int i=0;i<s.size();i++)
        {
            char c=s[i];
            if(c=='('||c=='['||c=='{')
            {
                node.push(c);//符合要求就入栈
            }else if(c==')'||c==']'||c=='}')
            {
                if(node.empty())//先判断没有配对的情况
                {
                    cout<<"no";
                    return 0;
                }
                char top=node.top();
                int y=0;
                if(top=='('&&c==')') y=1;
                if(top=='['&&c==']') y=1;
                if(top=='{'&&c=='}') y=1;
                    if(!y)
                    {
                        cout<<top<<endl;
                        cout<<"no";
                        return 0;
                    }
                else
                {
                    node.pop();
                }
            }
        }
    if(node.empty())
    {
        cout<<"yes";
    }else{
        cout<<node.top()<<endl;
        cout<<"no";
    }
    return 0;
}

题目2:队列的应用(银行业务队列)

相关伪代码

定义两个队列qa、qb
输入数据数量n
循环(i<n)
{
  输入处理数据num
  if(num%2!=0)
    {
      进入qa队列
    }else
    {
      进入qb队列
    }
}
循环(qa或qb不是空队列时)
{
  循环(i<2&&!qa.empty)
    {
      格式化输出不超过两个qa里的元素
    }
  格式化输出qb里的元素
}

代码

#include<iostream>
#include<queue>

using namespace std;
int main()
{
    queue<int>qa;
    queue<int>qb;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        {
            int num;
            cin>>num;
            if(num%2!=0)
            {
                qa.push(num);
            }else
            {
                qb.push(num);
            }
        }
    int first=1;
    while(!qa.empty()||!qb.empty())
        {
            for(int i=0;i<2&&!qa.empty();++i)
                {
                    if(!first)
                    {
                        cout<<" ";
                    }
                    cout<<qa.front();
                    qa.pop();
                    first=0;
                }
            if(!qb.empty())
            {
                if(!first)
                {
                    cout<<" ";
                }
                cout<<qb.front();
                qb.pop();
                first=0;
            }
        }
    cout<<endl;
    return 0;
}

三、实验使用环境(本次实验所使用的平台和相关软件)

  • 操作系统:Windows 10 专业版
  • 编程语言:C++
  • 开发工具Visual Studio 2022
  • 编译器:vs2022默认编译器

四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)

题目1:符号配对

本机运行截图

本机stack

PTA提交截图
栈1

题目2:银行业务队列

本机运行截图
本机queue

PTA提交截图
队列1


五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)

遇到的问题及解决方法:

  1. 问题:编译报错
  • 解决方法:.pop/.front后面要加上括号。
    2. 问题:符号配对判断条件错误
  • 解决方法:top是取在栈里准备匹配的第一个元素,c的查找情况与top配对即可

实验体会和收获:

  • 掌握了string的使用
  • 熟练掌握stack和queue的基本使用
  • 掌握栈和队列的一些典型应用案例

六、附件(参考文献和相关资料)

  1. C++ Primer
  2. 实验3-栈与队列
posted @ 2026-04-05 15:46  豆芽菜zzzz  阅读(2)  评论(0)    收藏  举报