Linked List로 구현된 Polynomial Class의 구현1. 이차원 배열에 미로를 찾는 문제를 출제하고 해결하는 프로그램의 구현.1) Polynomial을 Linked List를 사용하지 않고 Circular Linked List를 사용함으로써 AV(Available space list)를 이용, Node반환을 훨씬 효율적으로 할 수 있었다. 즉, Destructor가 간단해 졌다.2) 생성자, 소멸자, copy constructor, operator =,+,-,*를 함수 구현한다.3) 리스트 iterator class를 구현한다.2.알고리즘(1) 일반적인 다항식은 A(x)=amxem+...+a1xe1와 같다. 여기서 ai는 0이 아닌 계수이고 ei는 음수가 아닌 정수 지수이다.(2) 연결 리스트 template을 구현하는데, Type은 struct term으로 구체화한다. term의 데이터 멤버가 공용인 것을 강조하기 위해 term을 struct를 사용한다.(3) Iterator class를 생성하여 연결 리스트의 순회 방법을 다룬다.(4) 원형 리스트를 사용하여 다항식의 모든 노드를 효과적으로 반환하게 한다.first-> 3 14 -> 2 8 -> 1 03. Polynomial is ( ADT의 구현 )object : 헤드 노드를 가진 원형 리스트를 이용하여 다항식을 나타내는 Polynomial 구현.class Term{ //Data Type: Term class//Term의 모든 멤버는 묵시적으로 publicpublic:int coef; //계수int exp; //지수void Init(int c, int e){coef = c; exp = e;}; //Data 초기화}; //head node가 되는 부분class Polynomial{//operator overloading(friend 사용)friend istream& operator>>(istream& is, Polynomial& x);//입력friend ostream& operator a; cin >> b;{Polynomial c;c = a + b;cout < "a 다항식 : "
< 자료구조 >Linear Queue Circular Queue프로그램 설명template을 이용한 Linear Queue와 Circular Queue구현.Bag class에서 상속 받고 필요한 함수는 Queue class에서 동적 바인딩(virtual) 함.쓰레드를 이용하여 Queue 배열에 데이터를 삽입, 삭제하는 것은 동시에 실행되도록 함.Linear Queue일직선 배열 속의 데이터가 삽입, 삭제됨.한번 삭제된 곳에는 새로운 데이터가 들어갈 수 없음.(이 점을 개선한 것이 원형 큐이다.)Circular Queue도넛 모양의 원형 배열 속에 데이터가 삽입, 삭제됨.한번 데이터가 삭제된 곳도 계속 데이터가 삽입, 삭제 될 수 있음.프로그램 소스Linear QueueBag class(Queue class가 상속)#define Maxsize 5 //Maxsize는 Queue배열의 총 크기template class Queue01;class CQueueDlg; //AfxMessageBox를 사용하기 위해..template //template으로 선언class Bag{public:Bag();virtual ~Bag();//Add, Delete, IsFull, IsEmpty는 Queue 클래스에서 다시 정의할//것이기 때문에 virtual로 선언해줌virtual void Add(T jaryo); //data[]배열속에 T형 데이터 삽입virtual T *Delete(T& jaryo);// data[]배열속에 T형 데이터 삭제virtual BOOL IsFull(); // data[]배열이 다 찼는지 검사virtual BOOL IsEmpty(); //data[]배열 비었는지 검사void Full(); //배열이 다 찼음을 알리는 메시지 띄우기void Empty(); //배열이 비었음을 알리는 메시지 띄우기int top; //배열의 처음을 가리킴(Bag class에서는//삽입에 사용, Queue class에서 상속받//았을 때는 삭제에 사용)protected:T data[Maxsize]; //Bag class의 배열};#endif // !defined(AFX_BAG_H__C56BFC6B_3CFC_4713_9FA5_0937047E4C3A__INCLUDED_)////////////////////////////////////////Bag class의 멤버함수 구현/////////////////////////////////////////생성자templateBag::Bag(){top = 0; //top = 0으로 초기화}//소멸자templateBag::~Bag(){}//자료의 삽입//배열속에 자료가 다 찼는지 검사하고 그렇지 않을 경우 자료를 삽입//자료를 넣은 후 top은 그 다음 배열을 가리키도록 ++해줌.templatevoid Bag::Add(T jaryo){if(IsFull())Full();elsedata[++top] = jaryo;}//자료 삭제//삭제할 자료는 배열의 중간에 위치한 데이터templateT *Bag::Delete(T& jaryo){if(IsEmpty()){Empty();}int deletePos = top/2;jaryo = data[deletePos];for(int index=deletePos; indexSuspendThread();pThread[1]->SuspendThread();}//queue배열 상태를 보여줌void CQueueDlg::OnDisplay(){m_Queue.Empty(); //m_Queue를 초기화CDC *pDC = GetDC();int i;CString str_1; //queue배열값을 string으로 포맷하기 위해//왜냐면 m_Queue가 Cstring형이기 때문CString str_2; //배열 순서를 보여주기 위한for(i=0; iSuspendThread();}//char형 queue배열 요소 표시void CQueueDlg::OnDisplayS(){m_QueueS.Empty(); //m_Queue 에디트 박스 초기화CDC *pDC = GetDC();int i;CString str_1;//삽입되었다 삭제된 부분은 빈칸으로 표시for(i=0; iSuspendThread();}void CCircleQDlg::OnCDisplay(){m_CQueue.Empty();CDC *pDC = GetDC();CString str_1;CString str_2;//Queue의 내용 표시for(int i=0; iSuspendThread();pThread[3]->SuspendThread();}void CCircleQDlg::OnDisplayS(){m_CQueueS.Empty();CDC *pDC = GetDC();CString str_1;for(int i=0; i