用c++實現隊列

1.隊列的特點: 先進先出,用數組存儲。
***2.隊列的基本操作:***存入數據、刪除數據、讀隊列頭數據。

   需要一個變量front指向隊列的頭下標,另一個變量rear指向隊列的尾下標。
   增加元素時rear向後移一個,刪除一個元素時front向後移一個,但是並不
   刪除原有數據,這樣的話就會浪費前面的空間,所以我們要假設數組前後相
   連,循環的存放數據,直到數組中所有數據都有效時存滿。

存入數據(append):
在這裏插入圖片描述
刪除數據(serve):
在這裏插入圖片描述
讀取隊列頭數據(retrieve)
在這裏插入圖片描述
3.程序實現

#include<iostream>
#include"utility.h"

using namespace std;

const int maxqueue = 10; //隊列的長度,也就是數組的長度

class Queue {
public:
   Queue();  //構造函數
   bool empty() const;  //判斷隊列是否爲空,在函數操作中並不改變隊列元素,所以要加const
   Error_code serve();  //刪除一個數據
   Error_code append(const Queue_entry &item);  //將item的值加進隊列中,爲了節省空間用引用,但使用過程中不能改變原有值,所以加const
   Error_code retrieve(Queue_entry &item) const;  //讀出隊列的頭數據,在函數操作中並不改變隊列元素,所以要加const

protected:
   int count;  //計算隊列數據個數
   int front, rear;  //隊列頭下標和隊列尾下標
   Queue_entry entry[maxqueue];  //定義一個數組當做隊列來存放數據
};


Queue::Queue() //構造函數
/*
Post: The Queue is initialized to be empty.
*/
{
   count = 0; //初始隊列個數爲0
   rear = maxqueue - 1;  //存入數據時rear先向後移再放數據,所以初始時rear應該指向0號下標的前一個,隊列是循環的,所以rear爲總長度減一
   front = 0; //初始時front指向0號下標
}

bool Queue::empty() const //判斷隊列是否爲空
{
   return count == 0;
}

Error_code Queue::append(const Queue_entry &item)  //將item的值加進隊列中
{
   if (count >= maxqueue) return overflow;  //若隊列中已存滿則提示溢出,未滿則執行下一步
   count++;
   rear = ((rear + 1) == maxqueue) ? 0 : (rear + 1);  //若rear現在已經指向數組的最大下標則循環,這個數據存放在0下標
   entry[rear] = item;  //將數據存入數組
   return success;
}


Error_code Queue::serve()   //刪除一個數據
{
   if (count <= 0) return underflow; //若隊列中無元素則提示下溢出
   count--;
   front = ((front + 1) == maxqueue) ? 0 : (front + 1); //若目前front指向最大下標,則刪除這個元素,front需向後移,循環則指向0號下標
   return success;
}


Error_code Queue::retrieve(Queue_entry &item) const   //讀出隊列的頭數據
{
   if (count <= 0) return underflow;  //若隊列中無元素則提示下溢出
   item = entry[front];  //將隊列頭元素的值賦給item
   return success;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章