problem
rear和length表示的循环队列
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
假设将循环队列定义为:以与变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。
输入:
先输入一个不大于100的正整数n(输入数据个数)和m(循环队列数组的大小),再输入n个整数,其中输入0表示出队。
输出:
要求用循环队列实现,队满时如有入队则输出"No"并丢掉此元素,出队时输出这个元素。注意:这种表示方法队列中可以存储m个元素!
输入样例:
10 5
2 6 0 56 89 34 2322 25 0 10
输出样例:
2
No
6
solo
很简单的循环队列,主要的点是把申请的那个数组第一个空出来,用作指示队满的标志就可以轻松判断队列的满
code
# include <iostream>
# include <cstdio>
# include <cmath>
# include <cctype>
# include <map>
# include <string>
using namespace std;
void queuel_push(int temp,int *rear);
void queuel_pop(int *rear,int length);
int main()
{
int n,m;
int length=0;
cin>>n>>m;
int queuel[100];
queuel[0]=0;
int *rear=queuel;
while(n--)
{
int temp;
cin>>temp;
if(temp==0)
{
queuel_pop(rear,length);
length--;
}
else
{
// is queue not full yet?
if(length>=m)
{
cout<<"No"<<endl;
continue;
}
else
{
queuel_push(temp,rear);
rear++;
length++;
}
}
}
return 0;
}
void queuel_push(int temp,int *rear)
{
rear++;
*(rear)=temp;
}
void queuel_pop(int *rear,int length)
{
if(*rear==0);
else
{
cout<<*(rear-length+1)<<endl;
}
}