循环队列(进队,出队)

描述

根据给定的空间构造顺序循环队列,规定队满处理方法为少用一个元素空间。例如,给定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

*/

猜你喜欢

转载自www.cnblogs.com/oleolema/p/9033071.html