★ 10. 연결 리스트를 이용한 스택 구현하기
연결 리스트를 이용한 스택 구현
전과 마찬가지로 각 기능별 함수로 구현되었습니다.
// # 연결 리스트를 이용한 스택 #
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int element;
struct stackNode
{
element data;
// # 다음 노드를 가리키는 포인터 변수 #
stackNode *link;
};
stackNode* top;
// # 스택이 비어 있으면 true 아니면 false를 반환 #
int isEmpty()
{
// # top 포인터가 NULL이면 스택이 비어 있는 것 #
return (top == NULL);
}
// # 스택의 TOP에 원소를 삽입 #
void push(element item)
{
// # 새로운 노드 공간을 확보 #
stackNode* temp = new stackNode;
// # 함수로 전달된 값을 복사 #
temp->data = item;
// # 새로운 노드가 현재 상태의 첫 노드를 가리킴 #
temp->link = top;
// # top이 새로운 노드를 가리키게 한다. #
top = temp;
}
// # 스택의 TOP에서 원소를 삭제 #
element pop()
{
element item;
stackNode* temp = top;
// # 스택이 비어있으면 #
if (top == NULL)
{
cout << endl << endl << "스택 비어 있음 !" << endl;
return 0;
}
else
{
// # 이전 TOP 데이터를 백업 #
item = temp->data;
// # TOP이 다음 노드를 가리키게 함 #
top = temp->link;
// # 이전 TOP 노드의 공간을 반납한다 #
delete(temp);
// # 이전 TOP 데이터를 리턴한다 #
return item;
}
}
element peek()
{
element item;
if (top == NULL)
{
cout << endl << endl << "스택 비어 있음 !" << endl;
return 0;
}
else
{
item = top->data;
return item;
}
}
void main()
{
push('A');
push('B');
push('C');
push('D');
push('E');
while (isEmpty() == false)
{
printf("%c\t", pop());
}
getchar();
}