스택 구현하기 in C++
스택이란?
- 스택(Stack)이란 여러 자료구조 중 하나로, 후입선출(LIFO; Last In, First Out)의 데이터 삽입 및 가져오기 방식을 지원하는 구조이다.
예를 들어보면 우리가 [2, 4, 3, 7, 8]을 순서대로 스택에 삽입하지만, 데이터를 빼낼때는 [8, 7, 3, 4, 2]의 순서로 나오게 되는것이다.
- 아주 쉽게 설명하면, 우리가 살면서 한 번쯤은 먹어봤을 유명한 스낵인 프링글스가 그 예가 되겠다.
분명 생산공장에서는 통의 제일 아랫부분에 있는 조각을 가장 먼저 넣었겠지만, 우리는 뚜껑을 열어 가장 위에 있는 조각부터 먹지않는가.
코드 소개
C++언어를 이용하여 스택을 구현해보는 프로그램이다.
코드
/*
* stack.h
*
* Created on: 2017. 3. 29.
* Author: Minsu
*/
#ifndef STACK_H_
#define STACK_H_
typedef int ItemType;
const int MAX_STACK_SIZE = 30; // Set max stack size
class Stack
{
int top; // element of stak's top
ItemType data[MAX_STACK_SIZE]; // data store
public:
Stack(); // constructor
~Stack(); // destructor
bool isEmpty();
bool isFull();
void push(ItemType e); // add element in stack
ItemTypepop(); // delete and return 'top'
ItemType peek(); // return 'top'
};
#endif /* STACK_H_ */
/*
* stack.cpp
*
* Created on: 2017. 3. 29.
* Author: Minsu
*/
#include "stack.h"
#include <iostream>
#include <cstdlib>
using namespace std;
typedef int ItemType;
inline void error(const char *message) // error handling
{
cout << message << endl;
exit(1);
}
Stack::Stack() // constructor
{
top = -1;
}
Stack::~Stack() {} // destructor
bool Stack::isEmpty()
{
return (top == -1);
}
bool Stack::isFull()
{
return (top == MAX_STACK_SIZE - 1);
}
void Stack::push(ItemType e) // add element in stack
{
if(isFull())
{
error("Stack is full");
}
else
{
data[++top] = e;
}
}
ItemType Stack::pop() // delete and return 'top'
{
if(isEmpty())
{
error("Stack is empty");
}
return data[top--];
}
ItemType Stack::peek() // return 'top'
{
if(isEmpty())
{
error("Stack is empty");
}
return data[top];
}