스택을 구현해봤다.
PUSH와 POP만 우선해봤는데...
기타 기능들은 ..그냥 넘어가는..
리스트보단 쉽다..자료구조는 누군가 그러더라..
외우는게 아니고 이해하고 구현해볼 수 있음 된다고..
이해가 먼저고 구현이 가능한것은 책보고 해도되니....
#include<iostream>
#include<conio.h>
#include<ctime>
using namespace std;
class ArrayStackNode
{
private:
int data;
public:
void Input(int num)
{
data=num;
}
int GetData()
{
return data;
}
};
class ArrayStack
{
public:
int MaxCount;
int CurrentCount;
ArrayStackNode* node;
public:
ArrayStack(int num)
{
MaxCount=num-1;
CurrentCount=0;
node=new ArrayStackNode[num];
if(node!=NULL)
{
memset(node,0,sizeof(ArrayStackNode*)*num);
cout << "메모리 및 초기화 할당 완료" << endl;
}
}
~ArrayStack()
{
delete [] node;
cout << "메모리 소멸"<<endl;
}
void Push(ArrayStackNode pnode)
{
cout << "현재 CurrentCount값" << CurrentCount << endl;
if(CurrentCount!=MaxCount)
{
node[CurrentCount]=pnode;
CurrentCount++;
cout << "정상적으로 push를 하였습니다." << endl;
}
else
cout << "스택이 가득 찼습니다." << endl;
}
void Pop()
{
cout << "pop()함수 실행"<< endl;
ArrayStackNode *temp=new ArrayStackNode;
if(node==NULL)
{
cout << "NULL인 관계로 NULL" << endl;
}
else
{
*temp=node[CurrentCount];
delete temp;
cout << "스택 팝 메모리 해제"<<endl;
}
CurrentCount--;
}
ArrayStackNode* Peek()
{
}
void ShowAllData()
{
for(int j=MaxCount;j>=CurrentCount;j--)
{
cout << "[" << j << "]" << " " << "[empty]" << endl;
}
for(int i=CurrentCount-1;i>=0;i--)
{
cout << "[" << i << "]" << " " << node[i].GetData() << endl;
}
cout << "데이터 출력 완료" << endl;
}
};
int main()
{
ArrayStack arr(3);
ArrayStackNode n, m;
n.Input(10);
m.Input(20);
arr.Push(n);
arr.Push(m);
arr.ShowAllData();
arr.Pop();
arr.ShowAllData();
getch();
return 0;
}