循环队列(0965)
生活随笔
收集整理的這篇文章主要介紹了
循环队列(0965)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
描述
根據給定的空間構造順序循環隊列,規定隊滿處理方法為少用一個元素空間。例如,給定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?
轉載于:https://www.cnblogs.com/swust-wangyf/p/6725951.html
總結
以上是生活随笔為你收集整理的循环队列(0965)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象基础二
- 下一篇: DevExpress GridContr