티스토리 뷰
● Stack이란?
- Stack은 단순한 규칙을 가지고 있는 리스트이다. 여기서 규칙은 FILO(First In Last Out)이다.
- FILO(First In Last Out) : 먼저 들어간 데이터가 나중에 나오는 규칙
ex) 10명의 사람이 모두 1층에서 엘베를 탄 후 5층에서 내린다고 했을 때 가장 먼저 탄 사람이 가장 나중에 내린다.
- Stack은 먼저 들어온 게 나중에 나오는 조건만 충족한다면 어떠한 자료구조로 구현하든 상관없다.
- 배열과 연결리스트를 이용해서도 각각 Stack을 구현할 수 있다.
● 연결리스트를 이용해 Stack 구현
- 연결리스트의 맨 첫 번째 node를 head 라고 했을 때 이 haed를 가지고 모든 node를 연결할 수 있다.(아래 사진 참고)
- 바로 이 head를 이용하면 Stack을 구현할 수 있다.
- 어떻게? 데이터의 삽입과 삭제를 무조건 첫 번째 인덱스(= 노드)에서 하는 것이다.
ex1) 정수 1, 2, 3, 4 를 첫 번째 인덱스에만 삽입해서 연결리스트 만들기
- 1을 삽입하면 리스트에는 1을 담은 node 하나만 존재
- 2를 삽입할 때 리스트의 가장 앞 부분(= head)에 삽입
- 그로인해 당연히 2를 담은 노드가 1을 담은 노드보다 앞에 위치
- 마찬가지로 3과 4를 차례대로 가장 앞 부분에 삽입, 그렇게 되면 4를 담은 node가 가장 앞에 위치한다.
ex2) 위에서 만든 연결리스트의 node 삭제
- 제거 또한 리스트의 가장 앞 부분(head에 있는 node)을 제거한다.
- 가장 앞 부분인 4를 제거
- 가장 앞 부분인 3을 제거
- 가장 앞 부분인 2를 제거
- 마지막으로 1을 제거
● 정리
- 위와 같이 한쪽으로만 데이터를 삽입 및 제거하는 방법으로 Stack을 구현할 수 있다.
- Stack 같은 자료구조는 아래와 같은 경우에 필요하다.
1.
- Word, 포토샵 등을 작업할 때 ctrl + z 키를 이용하면 이전 작업 내용으로 돌아갈 수 있다.(되돌리기)
- 이는 컴퓨터가 사용자의 작업을 모두 Stack에 기록하고 있기 때문에 가능한 기능이다.
- 즉, 계속해서 Stack에 사용자의 작업 내역을 기록하고 있다가 ctrl + z 명령이 들어오면 가장 최근에 기록한(들어온) 작업을 버리는 것이다.
2.
- VSCode에 코드를 작성하면 자동으로 문법 검사를 해준다.
{
const garden = (3 + 16);
}
- 위의 코드에서 중괄호, 소괄호에 대한 문법 검사는 아래와 같은 방식으로 이루어진다.
- 문법검사기(이하 검사기)는 여는 괄호를 만나면 해당 괄호를 Stack에 넣고 이후 닫는 괄호를 만나면 미리 Stack에 넣어놨던 여는 괄호와 같은 종류인지를 체크한다.
1. 여는 괄호를 만났으므로 Stack에 넣는다.
2. 여는 괄호를 만났으므로 또 Stack에 넣는다.
3. 닫는 괄호를 만났으므로 가장 최근에 Stack에 넣어놨던 괄호를 꺼내 서로 일치하는 괄호인지 체크한다.
- 서로 일치하는 괄호이기에 문법 검사 통과 & 꺼냈던 괄호는 Stack에서 버린다.
4. 또 닫는 괄호를 만났으므로 또 가장 최근에 Stack에 넣어놨던 괄호를 꺼내 서로 일치하는 괄호인지 체크한다.
- 서로 일치하는 괄호이기에 문법 검사 통과 & 꺼냈던 괄호는 Stack에서 버린다.
- 검사기는 더 이상 체크할 코드도 없고 Stack도 비어있기에 문법 에러가 발생하지 않았다고 판단한다.
- 코드를 전부 검사했는데 Stack에 데이터가 남아있거나 괄호의 짝이 맞지 않으면 문법 에러가 발생했다고 판단한다.
'CS > 자료구조 및 알고리즘' 카테고리의 다른 글
#8 해시테이블 - 개념(해시, 해시 함수) / ChatGPT 사용해봄 (1) | 2023.02.20 |
---|---|
#7 큐(Queue) - 개념(FIFO : First In First Out) (0) | 2023.02.05 |
#5 연결리스트(Linked List) - 개념 with 노드(node) (0) | 2023.01.25 |
#4 배열 (0) | 2023.01.24 |
#3 JS 실행 환경 구축 (0) | 2023.01.23 |
- Total
- Today
- Yesterday
- Spring Boot
- OS
- 메모리
- Stream
- SpringBoot
- MongoDB
- 알고리즘
- 프로세스
- spring
- db
- Java8
- 자료구조
- git
- Advanced Stream
- node.js
- MySQL
- java
- API
- nosql
- jpa
- Phaser3
- Phaser
- 코테
- 프로그래머스
- DART
- SQL
- 운영체제
- 코딩테스트
- 빅데이터
- 빅데이터 분석기사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |