描述
根據給定的空間構造順序循環隊列,規定隊滿處理方法為少用一個元素空間。例如,給定5個元素空間構造循環隊列,則只能存放4個元素。試根據入隊及出隊操作判斷隊列最后的元素存放情況,並輸出最后隊列中的元素值,即完成給定入隊及出列操作后一次性全部出隊的元素值。要求采用順序隊列完成。
輸入
輸入的第一行為一個自然數n,表示要求構造的順序循環隊列空間數。第二行為操作次k,接下來k行為出隊入隊操作,每行各代表一次操作。入隊用in表示,出隊用out表示,如果是入隊,則in隔一空格后為一整數,表示入隊元素值。
輸出
輸出完成所有入隊出隊操作后,一次性出隊元素。用一個空格隔開。可以假定隊在完成所有操作后不為空。
樣例輸入
4
7
in 1
in 2
in 5
in 6
out
out
in 8
樣例輸出
5 8
#include"iostream" #include"string" using namespace std; typedef int element; class Queue{ private: element *arr; int front; int maxsize; int tail; public: Queue(int size){ maxsize = size; arr = new element[size]; front = 0; tail = 0; } bool empty(){ return tail == front; } bool full(){ return (tail + 1) % maxsize == front; } bool push(element data){ if(full()){ cout<<"out"<<endl; return false; } arr[tail] = data; tail = (tail + 1) % maxsize; return true; } int length(){ return (tail - front + maxsize) % maxsize; } element pop(){ if(empty()){ return false; } int temp = front; front = (front + 1) % maxsize; return arr[temp]; } element getFront(){ if(empty()){ return arr[-1]; } return arr[front]; } }; int main(){ element data; int n; string s; cin>>n; Queue myq(n); cin>>n; while(n--){ cin>>s; if(s=="in"){ cin>>data; myq.push(data); } else{ myq.pop(); } } while(!myq.empty()){ cout<<myq.pop()<<ends; } cout<<endl; return 0; } /* 4 7 in 1 in 2 in 5 in 6 out out in 8 */