佇列是一種抽象的資料型別(adt),可以儲存有序的專案序列.新專案被新增到隊尾,並可以刪除隊首專案。佇列有點像堆疊,不過堆疊在同一端進行新增和刪除。這使得棧是一種先進後出(lifo)的結構,而佇列是先進先出的(fifo)。從概念說說,佇列就好比是收款臺或者atm前面排的隊,所以對於上訴結構問題,佇列非常合適。因此,工程的任務之一是定義個queue類。
佇列中的專案就是顧客,heather銀行的代表介紹:通常,三分之一的顧客只需要一分鐘便可獲得服務,三分之一的顧客需要兩分鐘,另外三分之的顧客需要三分鐘。
另外,顧客到達的時間是隨機的,但每個小時使用自動櫃員機的顧客數量相當穩定。工程的另外兩個任務是:設計乙個表示顧客的類;編寫乙個程式來模擬顧客和佇列之間的互動。
1.佇列類
首先需要設計乙個queue類。這裡先列出佇列的特徵:
1)佇列儲存有序的專案序列
2)佇列所能容納的專案數有一定限制
3)應當能夠建立空佇列
4)應當能夠檢查佇列是否為空
5)應當能夠檢查佇列是否滿的
6)應當能夠在隊尾新增專案
7)應當能夠在隊首刪除專案
8)應當鞥能夠確定佇列中專案數
2.類設計
1.queue.h標頭檔案
#ifndef _queue_h_
#define _queue_h_
class customer
void set(long when);
long when() const
int ptime() const
};typedef customer item;
class queue
; enum ;
node *front;
node *rear;
const int qsize;
queue(const queue & q):qsize(0){}
queue & operator=(const queue & q)
public:
queue(int qs = q_size);
~queue();
bool isempty() const;
bool isfull() const;
int queuecount() const;
bool enqueue(const item &item);
bool dequeue(item &item);
};#endif
2.queue.cpp3.測試#include "stdafx.h"
#include "queue.h"
#include queue::queue(int qs):qsize(qs)
queue::~queue()
}bool queue::isempty() const
bool queue::isfull() const
int queue::queuecount() const
bool queue::enqueue(const item &item)
bool queue::dequeue(item &item)
void customer::set(long when)
// ch12_queue.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include "queue.h"
#include #include const int min_per_hr = 60;
bool newcustomer(double x);
using namespace std;
int _tmain(int argc, _tchar* argv)
} if(wait_time <= 0 && !line.isempty())
if (wait_time > 0)
wait_time--;
sum_line += line.queuecount();
} if (customers > 0)
{ cout<<"curtomers accepted: "<< customers<
AcWing 模擬佇列 佇列 模擬
時 空限制 1s 64mb 實現乙個佇列,佇列初始為空,支援四種操作 1 push x 向隊尾插入乙個數x 2 pop 從隊頭彈出乙個數 3 empty 判斷佇列是否為空 4 query 查詢隊頭元素。現在要對佇列進行m個操作,其中的每個操作3和操作4都要輸出相應的結果。第一行包含整數m,表示操作次...
用棧模擬佇列和佇列模擬棧
棧 先進後出 filo 佇列 先進先出 fifo class myqueue 兩棧模擬佇列 def init self self.input self.output 進佇列 defpush self,x 出佇列 defpop self self.peek return self.output.pop...
陣列模擬佇列
1.佇列本身是有序列表,若使用陣列的結構來儲存佇列的資料,則佇列陣列的宣告如下圖,其中 maxsize 是該隊 列的最大容量。2.因為佇列的輸出 輸入是分別從前後端來處理,因此需要兩個變數 front 及 rear 分別記錄佇列前後端的下標,front 會隨著資料輸出而改變,而 rear 則是隨著資...