1. 程式人生 > 實用技巧 >資料結構-佇列

資料結構-佇列

#include <iostream>
#include <vector>
#include <algorithm>

class Myqueue {
public:
    Myqueue();
    Myqueue(int k);
    ~Myqueue();
    int GetFront();//返回隊首元素,不存在返回-1
    int GetBack();//返回隊尾元素,不存在返回-1
    bool enQueue(int value);//向迴圈佇列插入一個元素,成功返回真
    bool deQueue();//從佇列刪除一個元素,成功返回真
    bool isEmpty();//檢查佇列是否為空
    bool isFull();//檢查佇列是否為滿
    void showqueue(vector<int>& Target,int rear,int front);//列印佇列全部元素
private:
    int rear;
    int front;
    int count;
    std::vector<int> nums;
};

Myqueue::Myqueue():rear(0),front(0),count(0) {
    nums.resize(128);
}

Myqueue::~Myqueue() {
    
}

Myqueue::Myqueue(int k) :rear(0), front(0), count(0) {
    nums.resize(k);
}

bool Myqueue::enQueue(int value) {//向迴圈佇列插入一個元素,成功返回真
    if (count == nums.size()) {
        return false;
    }
    nums[rear++] = value;
    rear %= nums.size();//只要start小於nums.size(),start就等於自己,要是start==nums.size(),那start就等於0
    ++count;
    return true;
}

bool Myqueue::deQueue() {//從佇列刪除一個元素,成功返回真
    if (count == 0) {
        return false;
    }
    nums[front++] = 0;
    front %= nums.size();
    --count;
    return true;
}

int Myqueue::GetFront() {//返回隊首元素
    if (count == 0)  return -1;
    return nums[front];
}

int Myqueue::GetBack() {//返回隊尾元素
    if (count == 0) return -1;
    return nums[(rear-1+nums.size())%nums.size()];
}

bool Myqueue::isEmpty() {//判斷佇列是否為空
    return count == 0;
}

bool Myqueue::isFull() {//判斷佇列是否為滿
    return nums.size() == count;
}

int main()
{
    Myqueue Queue(10);
    for (int i = 1; i < 10; ++i) {
        Queue.enQueue(i);
    }
    Queue.deQueue();
    Queue.enQueue(10);
    Queue.enQueue(11);
    Queue.deQueue();
    Queue.enQueue(12);
    std::cout << Queue.GetFront()<<std::endl;
    std::cout << Queue.GetBack() << std::endl;
    return 0;
}