스택(Stack)
스택이란 프링글스 통으로 이해하면 아주 간편하다

위 사진은 프링글스 통이다 프링글스 통이 과자를 관리하는 방식이 스택이다
스택은 한쪽은 막히고 한쪽은 뚫려있는 프링글스 통에 비유할 수 있고, 다음과 같은 특성을 가진다
먼저 들어간 것이 나중에 나온다
후입선출 혹은 선입후출 방식으로 영어로는 LIFO(Last-In, First-Out) 구조의 자료구조이다.
스택 ADT 정의
스택의 ADT는 나름 정형화 되어있는 편이다.
프링글스 통으로 할 수 있는 것은 다음과 같다.
- 프링글스 통에 과자를 넣는다 : push
- 프링글스 통에서 과자를 꺼낸다 : pop
- 프링글스 통 안을 들여다 본다 : peek
- void StackInit(Stack * pstack);
- 스택의 초기화를 진행
- 스택 생성 후 제일 먼저 호출되어야 하는 함수
- int SIsEmpty(Stack * pstack);
- 스택이 비어있는 경우 TRUE(1)를, 그렇지 않으면 FALSE(0)을 반환
- void Spush(Stack * pstack, Data data);
- 스택에 데이터를 저장한다. 매개변수 data로 전달된 값을 저장
- Data SPop(Stack * pstack);
- 마지막에 저장된 요소를 삭제한다.
- 삭제된 데이터는 반환이 된다
- 본 함수의 호출을 위해서는 데이터가 하나 이상 존재함이 보장되어야 한다.
- Data SPeek(Stack * pstack);
- 마지막에 저장된 요소를 반환하되 삭제하지 않는다.
- 본 함수의 호출을 위해서는 데이터가 하나 이상 존재함이 보장되어야 한다.
앞으로 스택을 구현함에 앞서 결정해야할 사항이 있다
스택을 배열 기반으로 구현할지 아니면 연결 리스트 기반으로 구현할지