ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7-22 堆栈模拟队列 (25 分)

2021-06-11 11:05:56  阅读:130  来源: 互联网

标签:25 队列 22 int cin item ERROR 堆栈


设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。

所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:

int IsFull(Stack S):判断堆栈S是否已满,返回1或0;
int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0;
void Push(Stack S, ElementType item ):将元素item压入堆栈S;
ElementType Pop(Stack S ):删除并返回S的栈顶元素。
实现队列的操作,即入队void AddQ(ElementType item)和出队ElementType DeleteQ()。

输入格式:
输入首先给出两个正整数N1和N2,表示堆栈S1和S2的最大容量。随后给出一系列的队列操作:A item表示将item入列(这里假设item为整型数字);D表示出队操作;T表示输入结束。

输出格式:
对输入中的每个D操作,输出相应出队的数字,或者错误信息ERROR:Empty。如果入队操作无法执行,也需要输出ERROR:Full。每个输出占1行。

输入样例:
3 2
A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T
输出样例:
ERROR:Full
1
ERROR:Full
2
3
4
7
8
ERROR:Empty

在这里插入图片描述

#include<bits/stdc++.h> 
using namespace std;
stack<int>s1;  
stack<int>s2;  
  
int main()
{  
    int m,n,i,a;  
    char c;  
    cin>>m>>n;  
    if(m>n)
		swap(m,n);  
    while(1)
	{  
        cin>>c;  
        if(c=='T')  
            return 0;
        if(c=='A')
		{  
            cin>>a;  
            if((s1.size()==m)&&(s2.size()!=0))
                cout<<"ERROR:Full"<<endl;  
            else
			{  
                int len1,t;  
                if(s1.size()==m)
				{  
                    len1=s1.size();  
                    while(len1--)
					{  
                        t=s1.top();  
                        s1.pop();  
                        s2.push(t);  
                    }  
                    s1.push(a);  
                }  
                else if(s1.size()!=m)
                    s1.push(a);  
            }  
        }  
        else if(c=='D')
		{  
            if((s1.size()==0)&&(s2.size()==0)) 
                cout<<"ERROR:Empty"<<endl;   
            else
			{  
                int len2;  
                if(s2.size()==0)
				{  
                    len2=s1.size();  
                    while(len2--)
					{  
                        int t=s1.top();  
                        s1.pop();  
                        s2.push(t);  
                    }  
                    cout<<s2.top()<<endl;  
                    s2.pop();  
                }  
                else if(s2.size()!=0)
				{  
                    cout<<s2.top()<<endl;  
                    s2.pop();  
                }  
            }  
        }  
    }  
    return 0;  
}

在这里插入图片描述
模拟队列和真实队列还是有本质的区别的

#include<bits/stdc++.h> 
using namespace std;
queue<int> q; 
  
int main()
{  
    int m,n,i,a;  
    char c;  
    cin>>m>>n;  
    n+=m;	
    for(i=0;;i++)
	{  
        cin>>c;  
        if(c=='T')  
            return 0;
        if(c=='A')
		{  
            cin>>a;  
            if(q.size()==n)
			{
                cout<<"ERROR:Full"<<endl;  
            }  
            else
			{  
                q.push(a);  
            }  
        }  
        else if(c=='D')
		{  
            if(q.size()==0)
			{  
                cout<<"ERROR:Empty"<<endl;  
            }  
            else
			{  
                cout<<q.front()<<endl;  
                q.pop();   
            }  
        }  
    }  
    return 0;  
}

在这里插入图片描述

标签:25,队列,22,int,cin,item,ERROR,堆栈
来源: https://blog.51cto.com/u_14013325/2895856

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有