Paste Search Dynamic
Recent pastes
Block Queue
  1. //Dariienko D. I.
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. struct Block {
  8.         int data;
  9.         Block *next;
  10.         Block (int x) {data = x; next = 0;}
  11. };
  12.  
  13. class Queue {
  14.         private:
  15.         Block *first = 0, *last = 0;
  16.         int count = 0;
  17.         public:
  18.         void push(int n) {
  19.                 count++;
  20.                 Block *x = new Block(n);
  21.                 if (last) {
  22.                         last->next = x;
  23.                         last = x;
  24.                 } else last = first = x;
  25.         }
  26.         int pop() {
  27.                 if (first == 0) throw 1;
  28.                 int tmp = first->data; // ->   (*first).data
  29.                 Block *p_tmp = first;
  30.                 first = first->next;
  31.                 count--;
  32.                 if (first == 0){
  33.                         last = 0;
  34.                 }
  35.                 delete p_tmp;
  36.                 return tmp;
  37.         }
  38.         int front() {
  39.                 if (first == 0) throw 1;
  40.                 int tmp = first->data;
  41.                 return tmp;
  42.         }
  43.         int size() {
  44.                 return count;
  45.         }
  46.         void clear() {
  47.                 while(count!=0) this->pop();
  48.         }
  49.         bool empty() {
  50.                 return count!=0;
  51.         }
  52.         void exit() {
  53.                 cout<<"bye"<<'n';
  54.         }
  55. };
  56.  
  57. int main() {
  58.         Queue x;
  59.         int number;
  60.         string method;
  61.         while( cin >> method ){
  62.                 if( method == "push" ){
  63.                         cin >> number; x.push(number);
  64.                         cout << "ok"<<'n';
  65.                 }
  66.                 else if(method == "front"){
  67.                         if(x.empty())cout << x.front() << 'n';
  68.                         else cout<<"error"<<'n';
  69.                 }
  70.                 else if(method == "pop"){
  71.                         if(x.empty()) cout << x.pop() << 'n';
  72.                         else cout<<"error"<<'n';
  73.                 }
  74.                 else if( method == "clear" ){x.clear(); cout<<"ok"<<'n';}
  75.                 else if( method == "exit" ){x.exit(); return 0;}
  76.                 else if( method == "size" )cout<<x.size()<<'n';
  77.         }
  78. }
Parsed in 0.016 seconds