circularAry 큐를 사용하여 복사하기

 

queueADT_ARY.h

template<typename TYPE>
struct NODE
{
 TYPE data;
 
};

template<typename TYPE>
class Queue
{
private:
 int front;
 int rear;
 int count;
 int maxSize;
 NODE<TYPE>* queueAry;

public:
 Queue(int size = 100);
 ~Queue();
 bool EnQueue(TYPE dataln);
 bool DeQueue(TYPE& dataOut);
 int QueueCount();
 bool QueueFront(TYPE& dataOut);
 bool QueueRear(TYPE& dataOut);
 bool EmptyQueue();
 bool FullQueue();

};

template<typename TYPE>
Queue<TYPE>::Queue(int size=100)
{
 maxSize= size;
 queueAry = new NODE<TYPE> [maxSize];

    if(!queueAry)
 {
  cout << " 큐에 할당할 메모리가 충분치 않습니다."<<endl;
  exit(100);
 }

 front =-1;
 rear = -1;
 count = 0;
}

template<typename TYPE>
Queue<TYPE>::~Queue()
{
 delete [] queueAry;
 queueAry=NULL;
}

template<typename TYPE>
bool Queue<TYPE>::EnQueue(TYPE dataIn)
{
  if(count == maxSize)
  {
   return false;
 
  }
  rear++;
  if(rear == maxSize)
  {
   rear=0;
  }

  queueAry[rear].data=dataIn;

  if(count == 0)
  {
  front = 0;
  }

  count++;
  return true;
 
}

template<typename TYPE>
bool Queue<TYPE>::DeQueue(TYPE& dataOut)
{
 if(count==0)
 {
  return false;
 }

 dataOut = queueAry[front].data;
 front++;

 if(front== maxSize)
 {
 front=0;
 }

 if(count==1)
 {
 rear=front =-1; // 다시 초기화
 }

 count--;
 return true;
}

template<typename TYPE>
int Queue<TYPE>::QueueCount()
{
 return count;
}

template<typename TYPE>
bool Queue<TYPE>::QueueFront(TYPE& dataOut)
{
 if(count==0)
 {
  return false;
  //underflow
 }
 else
 {
  dataOut = queueAry[front].data;
  return true;
 }
}

template<typename TYPE>
bool Queue<TYPE>::QueueRear(TYPE& dataOut)
{
 if(count==0)
 {
  return false;
 }
 else
 {
  dataOut = queueAry[rear].data;
  return true;
 }
}

template<typename TYPE>
bool Queue<TYPE>::EmptyQueue()
{
 return (count==0);
}

template<typename TYPE>
bool Queue<TYPE>::FullQueue()
{
 return (count==maxSize);
}

 

main.cpp

#include <iostream>
#include "queueADT_ARY.h"
#include <iomanip>
#include <string>
#include <ctime>  // 랜덤변수를 넣기 위해
using namespace std;

void fillQueue(Queue<int>& q);
void copyQueue(Queue<int>& q,Queue<int>& q1);

 

int main()
{
 Queue<int> q;
 Queue<int> q1;

 fillQueue(q);
 copyQueue(q,q1);

 return 0;
}

 

void fillQueue(Queue<int>& q)
{
 cout<<"======원본 Q1======"<<endl;

 srand(time(0)); // 씨앗(현재시간을 기본으로)

 int rnum;
 int category;

 for(int i=0; i<25; i++)
 {
  rnum = rand() % 51;    // 랜덤  0~50 으로 고정하기 위해 %51로 나머지 연산자 사용.
  category = rnum/10;    // 0~50의 수의 categorization
 
  cout<<setw(3) << rnum;
 
  q.EnQueue(rnum);
 }
}
 
void copyQueue(Queue<int>& q,Queue<int>& q1)
{
 cout<<endl;
    cout<<"======복사본 Q2======"<<endl;

    int temp=0;
    int data;

 while(q.DeQueue(data))
 {
 
  q1.EnQueue(data);
     temp=1;
    
    
 cout << setw(3)<<data;
     }


    cout<<endl;

}

'1. IT Story > Development' 카테고리의 다른 글

MultiChatServer  (0) 2012.03.29
MultiChatClient  (0) 2012.03.29
큐를 이용한 간단한 구직Pro  (0) 2012.03.29
queueADT를 이용한 간단한 응용프로그램  (0) 2012.03.29
StackADT를 이용한 중위식구하기  (0) 2012.03.29
배열로 구현한 Stack을 이용한 중위식구하기  (0) 2012.03.29
seqSearch  (0) 2012.03.29
AddressListing  (0) 2012.03.29
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,