2011년 10월 13일 목요일

C++ Queue Class

#include<iostream>
using namespace std;
class Queue;
class QNode{
 int _data;
 QNode* _next;
 QNode(int data, QNode* next){
  _data = data;
  _next = next;
 }
 friend class Queue;
};
class Queue{
 QNode* _head;
 QNode* _tail;
public:
 Queue();
 virtual ~Queue();
 void add(int data);
 int remove();
 bool isEmpty();
};
 Queue::Queue(){
  _head = 0;
  _tail = 0;
 }
 Queue::~Queue(){
  while(!isEmpty())
   remove();
 }
 void Queue::add(int data){
  QNode* temp = new QNode(data, 0);
  if(isEmpty()){
   _head = temp;
   _tail = temp;
  }else{
   _tail->_next = temp;
   _tail = temp;
  }
 }
 int Queue::remove(){
  QNode* temp = _head->_next;
  int ret = _head->_data;
  delete _head;
  _head = temp;
  return ret;
 }
 bool Queue::isEmpty(){
  return(!_head);
 }

 int main(){
  Queue Q;
  for(int i=0; i<100; i+=10){
   Q.add(i);
  }
  while(!Q.isEmpty()){
   cout<<Q.remove()<<"     ";
  }
 }