循環隊列(進隊,出隊)


描述

根據給定的空間構造順序循環隊列,規定隊滿處理方法為少用一個元素空間。例如,給定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

*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM