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 |