5-18 銀行業務佇列簡單模擬 (25分)
設某銀行有a、b兩個業務視窗,且處理業務的速度不一樣,其中a視窗處理速度是b視窗的2倍 —— 即當a視窗每處理完2個顧客時,b視窗處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出顧客序列。假定不考慮顧客先後到達的時間間隔,並且當不同視窗同時處理完2個顧客時,a視窗顧客優先輸出。
輸入為一行正整數,其中第1個數字n(\le≤1000)為顧客總數,後面跟著n位顧客的編號。編號為奇數的顧客需要到a視窗辦理業務,為偶數的顧客則去b視窗。數字間以空格分隔。
按業務處理完成的順序輸出顧客的編號。數字間以空格分隔,但最後乙個編號後不能有多餘的空格。
8 2 1 3 9 4 11 13 15
1 3 2 9 11 4 13 15
一、原理queue 佇列也是乙個線性儲存表,元素資料的插入在表的一端進行,在另一端刪除,從而構成了乙個先進先出fifo(first in first out)表。插入一端稱為隊尾,刪除一端稱為隊首。
預設使用雙端佇列deque來實現,queue也可看成乙個容器介面卡,將 deque 容器轉換為 queue 容器。當然,也可以利用其他合適的序列容器作
為底層實現queue容器。
c++ stl對queue佇列的泛化,是通過模板型別,將預設的deque雙端佇列型別匯入,在內部建立乙個序列容器物件,來處理 queue佇列的資料儲存和操作,包括queue佇列是否為空、取隊首元素、取隊尾元素、元素入隊和元素出隊等。由於僅需要取隊首和隊尾元素的操作,因此queue佇列容器並不提供任何型別的迭代器。
二、應用
1、建立
(1)queue() 預設的建構函式,建立乙個空的 queue 物件。
queueq;//使用預設的雙端隊列為底層容器建立了乙個空的queue佇列物件q,資料元素為int型別
(2)queue(const queue&) 複製建構函式,用乙個queue物件建立新的queue物件。
//queue> q1;
queue> q2(q1);//以雙向鍊錶為底層容器的queue物件
2、入隊和出隊
void push(const value_type& x) //插入佇列
void pop()//出隊,從佇列中刪除
3、取隊首尾元素
queue佇列容器的front函式和back函式,可分別讀取隊首和隊尾元素。
(1)value_type& front() 讀取佇列的隊首元素。
(2)value_type& back() 讀取佇列的隊尾元素。
4、其它
(1)bool empty() //判斷空
(2)size_type size() //佇列大小
**:(第一次試著用stl容器寫,哈哈。。。。)
1 #include "stdio.h
"2 #include "
queue
"3 #include "
iostream"4
using
namespace
std;
5int
main()
15else18}
19int flag = 0
;//主要是為了讓開頭的輸出沒有空格
20if(!a.empty())
25else
29while (!b.empty() || !a.empty()) 36}
37else
42if(!b.empty())46}
47}48 printf("\n"
);49
return0;
50 }
5 18 銀行業務佇列簡單模擬 25分
5 18 銀行業務佇列簡單模擬 25分 設某銀行有a b兩個業務視窗,且處理業務的速度不一樣,其中a視窗處理速度是b視窗的2倍 即當a視窗每處理完2個顧客時,b視窗處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出顧客序列。假定不考慮顧客先後到達的時間間隔,並且當不同視窗同時處理完2個顧...
銀行業務佇列簡單模擬
設某銀行有a b兩個業務視窗,且處理業務的速度不一樣,其中a視窗處理速度是b視窗的2倍 即當a視窗每處理完2個顧客時,b視窗處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出顧客序列。假定不考慮顧客先後到達的時間間隔,並且當不同視窗同時處理完2個顧客時,a視窗顧客優先輸出。輸入為一行正整...
銀行業務佇列簡單模擬
設某銀行有a b兩個業務視窗,且處理業務的速度不一樣,其中a視窗處理速度是b視窗的2倍 即當a視窗每處理完2個顧客時,b視窗處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出顧客序列。假定不考慮顧客先後到達的時間間隔,並且當不同視窗同時處理完2個顧客時,a視窗顧客優先輸出。輸入格式 輸入...