1. 队列
类比生活中,就是排队的现象,先进先出。
2. c++中的队列
不用自己实现,stl帮你实现了。只需要:
queue支持下面几种操作.
操作 |
说明 |
q.empty() |
判断是否为空 |
q.size() |
大小 |
q.pop() |
头部删除元素 |
q.front() |
返回头部的元素 |
q.push(item) |
从尾部添加元素 |
非常简洁。
3. 计算机中的例子
最经典的莫过于cpu多进程模型了,n个进程,每消耗X的cpu时间,就切换到其他进程去执行,看上去计算机是多进程同时在跑的。
aoj里面有个经典的例子:
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_B
我自己的实现是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| #include <iostream> #include <queue> using namespace std; struct pp { string name; int time; }; int main(int argc, char const *argv[]) { int n, q ; cin>>n>>q; queue<pp> que; for (int i = 0; i < n; ++i) { pp x; cin>>x.name>>x.time; que.push(x); } // debug print it int now=0; while(!que.empty()) { pp a = que.front(); // >100 if (a.time - q>0 ) { now += q ; a.time -= q; // debug // cout << "name: "<<a.name<< "\ta.spentime: "<< a.time + now<< " \n"; // cout << "now: " << now << endl; que.pop(); que.push(a); } // < 100 else { now += a.time; // cout << "name: "<<a.name<< "\ta.spentime: "<< now + a.time<< " \n"; // cout << "now: " << now << endl; cout << a.name << " " << now << endl; que.pop(); } // cout << "name: " << que.front().name << "\ttime: " << que.front().time<< endl; // que.pop(); } return 0; }
|
算是一个queue的典型用法了。