LIFO (후입선출) : 뒤에 들어온 것이 가장 먼저 나가는 구조.
키보드 입력을 하다 백스페이스를 누르면 최근에 입력한 글자를 지운다거나, 편집기에서 최근에 한 작업순으로 취소를 하는 기능 정도를 스택이 사용되는 예시로 들 수 있겠다.
맨 위의 원소만 접근 가능.

스택의 맨 위 원소(스택탑) 위에 원소를 삽입 해 새 스택탑이 되게 하고,
삭제의 경우에는 무조건 탑에 있는 원소를 삭제 하고 그 밑 원소가 스택탑이 된다.
ex) 스택의 맨 위에는 현재 수행 중인 함수의 정보가 저장되고, 이 함수를 호출한 함수는 바로 아랫 공간에 저장되어있다. 그래서 수행을 마친 함수가 스택 영역에서 지워지면 호출한 함수의 정보가 스택의 맨 위에 있게 된다. -> 프로그램이 수행되는 경로를 효율적으로 따라갈 수o
삽입 할 때는 삽입할 원소를 명시하지만, 삭제 할 때는 단순히 맨 위의 원소를 삭제한다. 스택에서 내용을 알려달라하면 무조건 맨 위에 있는 것을 알려줌.
1) isEmpty : 공백상태(비어있는 상태)인가?
2) isFull: 포화상태(가득 차 있는 상태)인가?
스택의 두 가지 오류사항 :
- 오버플로우: 리스트가 꽉 차 요소를 삽입할 수 없는 경우.
- 언더플로: 리스트 안에 요소가 없어 삭제나 참조 불가.
3) push(e) : 요소 e를 스택의 맨 위에 추가. 삽입 전 초화상태인지 아닌지를 먼저 검사.
4) pop() : 스택의 맨 위에 있는 요소를 꺼내 반환. 반환 전 공백상태인지 아닌지를 먼저 검사.
스택은 동적인 메모리 구조 로 함수 호출과 관련된 정보를 관리한다.
