스택(Stack) 구조
by ERC재이수
1.개요
Stack은 삽입과 삭제가 top이라 불리는 종점에서 각각 작동하는 ordered list 자료구조이다.
ordered list를 한글로는 뭔지 모름
LIFO(Last-In-First-Out)구조로, 마지막에 들어온 것이 첫번째로 나간다. 밑의 이미지들을 보면 이해가 갈것이다.
2.기능
Creates(max_size)
max_size만큼의 크기로 빈 스택을 만드는 메소드
C언어로 쓰면, 따로 struct를 만들어서 malloc으로, 자바나 c++ 같은 객체 지향 언어를 쓰면 Constructor로, stack을 size만큼 할당해준 다음 top을 -1로 설정한다.
void Push(item)
stack에 item을 넣는 메소드 stack이 꽉차면, 다 찼다는 에러 메세지를 보내고 아니면, item을 stack의 top로 보낸다.
그 다음 push를 할때 IsFulls()를 사용해 꽉찼는지 확인을 하고, stack[++top] = item 해준다. ++top을 하는 이유는, push()와 pop()을 할때, 문제가 생길 수 있기 때문이다. 정확히 설명하자면 주소값 떄문인데, 예를 들어 top이 0부터 시작하는 1칸짜리 stack이 있다 치자. 1칸짜리 stack이기 때문에 주소값은 0밖에 없을것 이다. 이때 ++top이 아닌, top++를 해주면, 데이터는 주소값 0에 들어가겠지만 top은 1이 된다. 그리고 pop()을 하면, 배열의 주소값 1은 없기 때문에, 에러를 계속 낼 것이다. top이 -1로 시작하고 top++를 해도 문제가 되는게 주소값 -1도 없으니 에러를 낼 것이다.
Element POP()
stack에서 item을 빼는 메소드 stack이 비었을 때, 에러 메시지를 보내고 아니면, item을 stack에서 부터 빼온다
pop()은 IsEmpty()로 비었는지 확인하고, 간단하게 return[top–] 를 하면 된다.
boolean IsFulls()
stack이 꽉차면 true, 아니면 false return IsFulls()는 top과 마지막 주소값(max_size-1)를 비교해서 맞으면 true를 return 하면 된다.
boolean IsEmpty()
stack이 비었으면 true, 아니면 fasle return IsEmpty()는 top이 -1인 경우이니 비교해서 맞으면 true를 return 하면 된다.
3.코드
- 자바로 짠 코드: https://github.com/21600055/DataStructures/blob/main/src/main/java/DataStructures/Stack.java
개인적으로 정리한 자료구조입니다. 수정되야하거나 건의 할 사항이 있으면, 21600055@handong.edu로 메일바랍니다.
Subscribe via RSS