C++/Generic/Generic Queue

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Create a generic queue.

#include <iostream>
using namespace std;
#define SIZE 100
template <class Qtype> class q_type {
  Qtype queue[SIZE]; 
  int head, tail;    
public:
  q_type() { 
     head = tail = 0; 
  }
  void q(Qtype num); 
  Qtype deq();  
};
template <class Qtype> void q_type<Qtype>::q(Qtype num)
{
  if(tail+1==head || (tail+1==SIZE && !head)) {
    cout << "Queue is full.\n";
    return;
  }
  tail++;
  if(tail==SIZE) 
     tail = 0; // cycle around
  queue[tail] = num;
}
template <class Qtype> Qtype q_type<Qtype>::deq()
{
  if(head == tail) {
    cout << "Queue is empty.\n";
    return 0;  
  }
  head++;
  if(head==SIZE) 
     head = 0; 
  return queue[head];
}
int main()
{
  q_type<int> queue1;
  q_type<char> queue2;
  int i;
  for(i=1; i <=10; i++) {
    queue1.q(i);
    queue2.q(i-1+"A");
  }
  for(i=1; i <=10; i++) {
    cout << "Dequeue 1: " << queue1.deq() << endl;
    cout << "Dequeue 2: " << queue2.deq() << endl;
  }
  return 0;
}