描述
根据给定的空间构造顺序循环队列,规定队满处理方法为少用一个元素空间。例如,给定5个元素空间构造循环队列,则只能存放4个元素。试根据入队及出队操作判断队列最后的元素存放情况,并输出最后队列中的元素值,即完成给定入队及出列操作后一次性全部出队的元素值。要求采用顺序队列完成,少用一个存储空间的方法区分队列的空和满。
input
输入的第一行为一个自然数n,表示要求构造的顺序循环队列空间数。 第二行为操作次k,接下来k行为出队入队操作,每行各代表一次操作。入队用in表示,出队用out表示,如果是入队,则in隔一空格后为一整数,表示入队元素值。
output
输出完成所有入队出队操作后,一次性出队元素。用一个空格隔开。可以假定队在完成所有操作后不为空。
样例输入
4
7
in 1
in 2
in 5
in 6
out
out
in 8
样例输出
5 8
这道题如题所示,建立一个循环队列就做了
代码如下
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int n; 6 typedef struct queue{ 7 int data[50]; 8 int head,tail; 9 }queue,*Queue; 10 11 void init(Queue queue){ 12 queue->head=queue->tail=0; 13 } 14 bool isEmpty(Queue queue){ 15 return queue->head==queue->tail; 16 } 17 bool isFull(Queue queue){ 18 return (queue->tail+1)%n==queue->head; 19 } 20 void in(Queue queue){ 21 int num;cin>>num; 22 if(isFull(queue))return; 23 queue->data[queue->tail++]=num; 24 queue->tail=queue->tail%n; 25 } 26 int out(Queue queue,int &e){ 27 if(queue->head==queue->tail)return 0; 28 e=queue->data[queue->head]; 29 queue->head=(queue->head+1)%n; 30 return 1; 31 } 32 33 int main(){ 34 int t; 35 queue queue; 36 init(&queue); 37 cin>>n>>t; 38 string str; 39 int num; 40 int e=1; 41 for(int i=0;i<t;i++){ 42 cin>>str; 43 if(str=="in"){ 44 in(&queue); 45 } 46 else if(str=="out")num=out(&queue,e); 47 } 48 while(out(&queue,e)){ 49 cout<<e<<" "; 50 } 51 return 0; 52 } 53 54