반응형
스택 STACK
스택(stack)은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다.
끝먼저내기 목록(Pushdown list)이라고도 한다. 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다.
자료를 넣는 것을 '밀어넣는다' 하여 푸시(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 하는데, 이때 꺼내지는 자료는 가장 최근에 보관한 자료부터 나오게 된다. 이처럼 나중에 넣은 값이 먼저 나오는 것을 LIFO 구조라고 한다.
쉽게 어떠한 박스에 물건을 하나씩 담아 넣고 꺼낼려면 위에서부터 꺼내야 하는 상황을 생각하면 될 것 같습니다.
배열을 이용한 스택 구현
class Stack
{
private :
int* data;
int size;
int top;
public :
Stack(int _size)
: top(-1)
{
data = new int[_size];
size = _size - 1;
}
void Push(int _data)
{
if (top >= size)
{
cout << "Stack Oveflow !" << endl;
return;
}
else
{
data[++top] = _data;
}
}
int Pop()
{
if (top <= -1)
{
cout << "Stack Underflow! ";
return -1;
}
else
{
int returnData = data[top];
data[top] = -1;
top--;
return returnData;
}
}
};
void main()
{
Stack stack(10);
for (int i = 0; i < 11; i++)
{
stack.Push(i);
}
for (int i = 0; i < 11; i++)
{
cout << stack.Pop() << " ";
}
}
//-- 결과
//Stack Oveflow !
//9 8 7 6 5 4 3 2 1 0 Stack Underflow! -1
연결 리스트 기반 스택 구현
class StackData
{
public :
int data;
StackData* next;
StackData()
: data(0), next(nullptr)
{
}
};
class Stack
{
private :
StackData* top;
public :
Stack()
{
top = new StackData;
top->data = -1;
}
void Push(int _data)
{
StackData* stack = new StackData;
stack->data = _data;
stack->next = top->next;
top->next = stack;
}
int Pop()
{
int value = -1;
if (top->next == nullptr)
{
cout << "Stack Underflow!" << endl;
}
else
{
StackData* stack = top->next;
value = stack->data;
top->next = stack->next;
delete stack;
stack = nullptr;
}
return value;
}
};
void main()
{
Stack* stack = new Stack;
for (int i = 0; i < 5; i++)
{
stack->Push(i);
}
for (int i = 0; i < 6; i++)
{
cout << stack->Pop() << " " ;
}
cout << endl;
for (int i = 0; i < 5; i++)
{
stack->Push(i * 2);
}
for (int i = 0; i < 6; i++)
{
cout << stack->Pop() << " ";
}
}
//-- 결과
//4 3 2 1 0 Stack underflow!
//-1
//8 6 4 2 0 Stack underflow!
//-1
반응형
'프로그래밍 관련 > 자료구조 & 알고리즘' 카테고리의 다른 글
[자료구조] 트리 (Tree) (0) | 2016.11.03 |
---|---|
[자료구조] 큐 (Queue) (0) | 2016.11.03 |
[자료구조] 해시 테이블 - 충돌 문제(Collision) (0) | 2016.09.24 |
[자료구조] 해시 [Hash]와 해시 테이블 [Hash Table] (0) | 2016.09.24 |
[자료구조] 연결 리스트 (Linked List) (0) | 2016.09.24 |