给定一个初始为空的队(队存储空间长度为10)和一系列进队、出队操作,请编写程序输出经过这些操作后队中的元素。队中元素值均为整数。(采用循环队列完成,禁用一个空间方法)
输入格式:
输入第1行为1个正整数n,表示操作个数;
第2行为给出的n个整数,非0元素表示进队,且此非0值即为进队元素,0元素表示出队。
输出格式:
第一行按出队顺序输出所有出队元素,以一个空格隔开;如果队空时做出队操作会输出"EMPTY",如果队满时做进队操作会输出"FULL"。
第二行中输出队中所有元素,以一个空格隔开。
末尾均有一个空格。
输入样例:
12
3 1 2 0 0 -1 0 0 0 4 5 0
输出样例:
3 1 2 -1 EMPTY 4
5
不想用指针写,想到了STL
用queue写了一遍总是在队满时报错,样例看不出错。
可能是题目要求必须循环队列一个空间可能就是不行吧。
不白写发出来做个纪念
C和C++混写了属于是
代码实现:
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
#define N 10
int main(){
queue<int>q;
int n=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
int a=0;
scanf("%d",&a);
if(a!=0&&q.size()<N){
q.push(a);
}
else if(q.size()>=N){
printf("FULL ");
continue;
}
if(a==0&&!q.empty()){
a=q.front();
printf("%d ",a);
q.pop();
}
else if(a==0&&q.empty()){
printf("EMPTY ");
}
}
printf("\n");
while(!q.empty()){
int b=0;
b=q.front();
printf("%d ",b);
q.pop();
}
return 0;
}
修正:重写一遍if else,把size改为9就对了
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
#define N 10
int main(){
queue<int>q;
int n=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
int x=0;
scanf("%d",&x);
if(x!=0){
if(q.size()==9){
printf("FULL ");
}else{
q.push(x);
}
}else{
if(!q.empty()){
cout<<q.front()<<' ';
q.pop();
}else{
printf("EMPTY ");
}
}
}
printf("\n");
while(!q.empty()){
int b=0;
b=q.front();
printf("%d ",b);
q.pop();
}
return 0;
}
循环队列,禁用一个空间方法不是空话,要判断s->front=(s->rear+1)%maxsize此时为队满