본문 바로가기
CS/DataStructure

[자료구조] Stack

by yongckim 2021. 12. 1.
728x90
반응형
스택이란?

스택은 선형구조를 가진 자료구조로 한 쪽 끝에서만 자료를 넣거나 빼는 후입 선출(Last-in First-out)의 형태로 동작합니다.

스택은 기본적으로 다음과 같은 연산을 합니다.

push

push 연산을 하면 스택에 지정한 데이터를 맨 끝에 넣습니다.

pop

pop 연산을 하면 스택에 맨 끝에 있는 데이터를 가져오고 스택에서 제거합니다.

peek

peek 연산을 하면 스택에 맨 끝에 있는 데이터를 가져옵니다.

스택의 활용

스택은 이전 상태로 되돌리는 경우에서 많이 사용됩니다.

예를 들어, 터미널에서 이전에 사용했던 명령들을 확인하고 사용할 수 있는 히스토리 기능이나 브라우저에서 이전 페이지로 되돌아가고 싶을 때 사용됩니다.

 

스택의 구현 (C)

스택은 배열 또는 링크드 리스트로 구현이 가능합니다.

 

- 배열리스트를 이용한 구현

https://github.com/zxcv9203/dataStructure/tree/master/chap03/arraystack

 

GitHub - zxcv9203/dataStructure

Contribute to zxcv9203/dataStructure development by creating an account on GitHub.

github.com

배열 리스트를 이용해서 스택을 구현은 다음과 같은 방식으로 구현하였습니다.

  • 배열을 원하는 크기만큼 동적할당 한후 현재 인덱스 가르키는 변수를 0으로 초기화합니다.
  • 값을 Push 할때는 데이터를 현재 인덱스 위치에 값을 넣고 인덱스를 1증가 시킵니다.
  • 값을 Pop 할때는 현재 인덱스 위치의 데이터를 반환하고 인덱스를 1 감소 시킵니다.
  • 값을 peek 할때는 현재 인덱스 위치에 데이터를 반환합니다.

- 링크드 리스트를 이용한 구현

https://github.com/zxcv9203/dataStructure/tree/master/chap03/linkedstack

 

GitHub - zxcv9203/dataStructure

Contribute to zxcv9203/dataStructure development by creating an account on GitHub.

github.com

  • 값을 Push 할때는 넣고 싶은 데이터와 가장 최근에 추가했던 노드를 가르키는 포인터를 가진 노드를 동적할당하고 헤더노드가 해당 노드를 가르키도록 하게 합니다.
  • 값을 pop할때는 가장 최근에 추가한 노드가 가르키고 있는 주소를 헤더노드가 가르키게하고 가장 최근에 추가했던 노드를 반환해줍니다.
  • 값을 peek할때는 가장 최근에 추가한 노드를 반환해줍니다.
스택 문제 (미로 찾기)

스택을 활용하면 미로에서 빠져나오는 길을 찾을 수 있습니다. 

https://github.com/zxcv9203/dataStructure/tree/master/chap03/findmaze

 

GitHub - zxcv9203/dataStructure

Contribute to zxcv9203/dataStructure development by creating an account on GitHub.

github.com

스택에다 데이터를 넣고 4방향으로 탐색하면서 스택에 경로를 추가하고 인접한 경로가 막혀있을 경우 스택에 넣어두었던 데이터를 pop하여 제거하는 방식으로 구현하였습니다.

반응형

'CS > DataStructure' 카테고리의 다른 글

[자료구조] 트리  (0) 2021.12.13
[자료구조] Deque  (0) 2021.12.11
[자료구조] Queue  (0) 2021.12.11