Push된 아이템이 제일 먼저 Pop되는 특징을 가짐top : 현재 가리키는 아이템의 위치, 값이 없을 때는 -1 값을 가짐MAX_STACK_SIZE : array를 사용해 구현할 경우 array 생성시 사이즈 지정, IsFull() 체크시 기준이 됨Push(item) : 아이템을 입력받아 배열의 가장 위에 추가Pop() : 가장 위에 있는 아이템을 제거하면서 출력Peek() : 가장 위에 있는 아이템을 제거하지 않고 보여줌IsEmpty() : Stack이 비어있는지 여부를 출력, topPop() 또는 Peek()을 호출해 underflow 오류 발생하는 것을 방지)IsFull() : Stack이 가득 차있는지 여부를 출력Push(item)를 호출해 overflow 오류 발생하는 것을 방지)Size() : 현재 포함하고 있는 아이템의 개수를 출력1) 함수 호출시 Stack으로 작동(재귀 함수가 대표적)
2) 중위 연산식을 후위 연산식으로 바꾸기
3) Backtracking 연산에 사용
4) Undo(실행 취소) 기능
template <typename T>
class Stack
{
private:
int top;
const static int maxSize = 100;
T arr[maxSize];
public:
Stack() { top = -1; }
bool IsFull() { return top == maxSize - 1; }
bool IsEmpty() { return top == -1; }
T Pop()
{
if(IsEmpty())
{
throw "Stack is empty";
}
return arr[top--];
}
void Push(T value)
{
if(IsFull())
{
throw "Stack is full";
}
arr[++top] = value;
}
T Peek()
{
if(IsEmpty())
{
throw "Stack is empty";
}
return arr[top];
}
};
template <typename T> 기능을 활용해 사용시 타입을 입력받아 여러 타입에 사용할 수 있는 Stack을 구현private:
int top;
const static int maxSize = 100;
T arr[maxSize];
top : 현재 가리키고 있는 인덱스의 위치maxSize : 미리 정해둔 배열의 최대 크기arr : T 타입의 maxSize 크기의 배열Stack() { top = -1; }
bool IsFull() { return top == maxSize - 1; }
bool IsEmpty() { return top == -1; }
IsFull() : Stack이 가득 차있는 여부를 확인IsEmpty() : Stack이 비어있는지 여부를 확인Push(T value) void Push(T value)
{
if(IsFull())
{
throw "Stack is full";
}
arr[++top] = value;
}
T 타입의 매개변수를 입력받아 Stack이 가득 차 있는지 확인 후 가득 차있다면 에러를 표시하고 아닐 경우 top에 1을 더한 자리에 값을 추가Pop() T Pop()
{
if(IsEmpty())
{
throw "Stack is empty";
}
return arr[top--];
}
top위치에 있는 값을 반환하고 top 값을 1 감소시킴Peek() T Peek()
{
if(IsEmpty())
{
throw "Stack is empty";
}
return arr[top];
}
top위치에 있는 값을 제거하지 않고 해당 데이터를 표시