排队
来源:互联网 发布:软件测试工程师自学 编辑:程序博客网 时间:2024/05/01 12:27
“★实验任务
军队阅兵时, 需要士兵们排好队, 每一个士兵都有一个独一无二的编号, 在部队里编号
即代表士兵, 现在队长要进行编一支队, 进队的士兵要么排在队首, 要么排在队尾, 出队的
总是队首的士兵出队, 现在队长苦恼, 平时一个队伍就那么几个人, 大家都很熟, 而这次阅
兵这么多人, 他记不得出队和剩下队伍里头的士兵的编号, 而上面的长官有急需一份编号单,
请你写一个程序,解决这队长的烦恼。
★数据输入
输入第一个字符“i” 代表“input” 进入队列,“o” 代表“output” 出队列,“e” 代表“end”
输入结束。
当输入的第一个字符为“i” 时,接着输入两个整数 a、b,整数a 只取 0 和 1,a 取 0
时表示排在队首,a 取 1 时表示排在队尾, 整数 b(0<b<1000000) 表示编号, 各编号不同。
当输入的第一个字符为“o” 时,队首出队。
当输入的第一个字符为“e” 时,数据输入结束。
★数据输出
当输入的第一个字符为“o” 时,队不为空,输出队首的编号“out number:”,否则输
出“queue empty!”。
当输入的第一个字符为“e” 时,先输出“print queue:”,队不为空,输出整个队列的
军队阅兵时, 需要士兵们排好队, 每一个士兵都有一个独一无二的编号, 在部队里编号
即代表士兵, 现在队长要进行编一支队, 进队的士兵要么排在队首, 要么排在队尾, 出队的
总是队首的士兵出队, 现在队长苦恼, 平时一个队伍就那么几个人, 大家都很熟, 而这次阅
兵这么多人, 他记不得出队和剩下队伍里头的士兵的编号, 而上面的长官有急需一份编号单,
请你写一个程序,解决这队长的烦恼。
★数据输入
输入第一个字符“i” 代表“input” 进入队列,“o” 代表“output” 出队列,“e” 代表“end”
输入结束。
当输入的第一个字符为“i” 时,接着输入两个整数 a、b,整数a 只取 0 和 1,a 取 0
时表示排在队首,a 取 1 时表示排在队尾, 整数 b(0<b<1000000) 表示编号, 各编号不同。
当输入的第一个字符为“o” 时,队首出队。
当输入的第一个字符为“e” 时,数据输入结束。
★数据输出
当输入的第一个字符为“o” 时,队不为空,输出队首的编号“out number:”,否则输
出“queue empty!”。
当输入的第一个字符为“e” 时,先输出“print queue:”,队不为空,输出整个队列的
编号,每个编号后跟一个空格,否则输
输入示例
i 0 1
i 1 2
i 0 3
o
o
o
e
输出示例
out number: 3
out number: 1
out number: 2
print queue: queue empty!
#include <stdio.h> const int maxn = 1000005; template<class numbertype> class Deque { public: Deque(); void push_front(const numbertype & date); void push_back(const numbertype & date); numbertype pop(); bool empty(); void print(); private: int maxsize; int front; int back; numbertype table[maxn]; }; template<class numbertype> Deque<numbertype>::Deque() { front = back = 0; maxsize = maxn; } template<class numbertype> void Deque<numbertype>::push_back(const numbertype & date) { back = (back + 1) % maxsize; table[back] = date; } template<class numbertype> void Deque<numbertype>::push_front(const numbertype & date) { table[front] = date; front = (front - 1 + maxsize) % maxsize; } template<class numbertype> numbertype Deque<numbertype>::pop() { front = (front + 1) % maxsize; return table[front]; } template<class numbertype> bool Deque<numbertype>::empty() { return front == back; } template<class numbertype> void Deque<numbertype>::print() { printf("print queue: "); if (empty()) { printf("queue empty!\n"); return; } for (int i = (front+1)%maxsize; i!=back; i=(i+1)%maxsize) { printf("%d ", table[i]); } printf("%d \n",table[back]); } Deque<int> myDeque; int main() { //freopen("in.txt", "r", stdin); char temp; int option, date; while (temp=getchar(),temp!='e') { switch (temp) { case 'i': scanf("%d%d", &option,&date); if (option) { myDeque.push_back(date); } else { myDeque.push_front(date); } break; case 'o': if (!myDeque.empty()) { printf("out number: %d\n", myDeque.pop()); } else { printf("queue empty!\n"); } break; default: break; } getchar(); } myDeque.print(); return 0; }
0 0