排队

来源:互联网 发布:软件测试工程师自学 编辑:程序博客网 时间:2024/05/01 12:27
★实验任务
军队阅兵时, 需要士兵们排好队, 每一个士兵都有一个独一无二的编号, 在部队里编号
即代表士兵, 现在队长要进行编一支队, 进队的士兵要么排在队首, 要么排在队尾, 出队的
总是队首的士兵出队, 现在队长苦恼, 平时一个队伍就那么几个人, 大家都很熟, 而这次阅
兵这么多人, 他记不得出队和剩下队伍里头的士兵的编号, 而上面的长官有急需一份编号单,
请你写一个程序,解决这队长的烦恼。
★数据输入
输入第一个字符“i” 代表“input” 进入队列,“o” 代表“output” 出队列,“e” 代表“end
输入结束。
当输入的第一个字符为“i” 时,接着输入两个整数 ab,整数a 只取 0 1a 0
时表示排在队首,a 1 时表示排在队尾, 整数 b0<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