▶ 스택이란?
: 스택은 나중에 들어간 데이터가 먼저 나오는 구조이다
(LIFO 구조 : Last Input First Output)
☞ 스택은 데이터를 저장할 스택 배열과 데이터를 저장할 위치를 알려 주는 스택 포인터 변수(sp)와 입력(push)과 출력(pop)을 담당하는 두 개의 함수로 구현된다.
▶ 스택 배열
: 스택 배열은 저장할 데이터가 정수인가, 문자인가 등의 저장할 데이터의 종류에 따라 다르게 만들어야 한다.
예) 저장할 데이터가 정수인 경우 int stack[10]; 10개의 정수가 저장될 스택 배열을 만듬 |
예) 저장할 데이터가 문자인 경우 char stack[10]; 10개의 문자가 저장될 스택 배열을 만듬 |
▶ 스택 포인터
: 스택은 여러 개의 데이터를 담아야 하므로 배열로 구현하지만 스택 포인터는 데이터를 저장할 위치를 알려주어야 하므로 보통 정수형 변수로 선언한다.
int sp; |
▶ push 함수
: 스택에 데이터를 넣는 역할을 하는 함수이다.
- 데이터를 넣어야 하므로 넣어야 할 데이터를 전달 받을 변수로 인수로 갖는다.
void push(int data) { stack[sp] = data; sp++; } |
▶ pop 함수
: 스택에서 데이터를 꺼내는 꺼낼 데이터를 리턴하기 위해서 pop함수의 앞에는 형 지정자를 쓴다.
int pop() { int pop_data; sp--; pop_data = stack[sp]; return pop_data; } |
- 스택에서 데이터를 꺼내면 이론상으로는 스택 배열에서 데이터가 사라져야 하지만 살제로는 데이터는 그대로 있고 단지 스택 포인터의 값만 1 감소한다.
- 데이터를 스택에 넣으려면 현재 스택 포인터가 가리키는 배열 방에 스택 포인터(sp)를 1 증가시켜 주고 스택의 데이터 항목을 저장한다. 데이터 항목을 삽입하기 전에 새로운 항목을 저장할 빈 공간이 있는지 검사해야 한다. 만약 스택 포인터(sp)가 주어진 스택 크기보다 크면 오버플로우(overflow)가 발생한다.
- 데이터 항목을 삭제하려면 스택에 있는 데이터 항목을 제거하고 스택 포인터를 하나만큼 감소시켜 준다. 데이터 항목을 삭제하기 전에 스택이 비어있는지 검사해야 한다. 만약 스택 포인터(sp)가 주어지 스택 크기보다 적으면 언더플로우가 발생한다.
[ 문제 1 ] www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 �
www.acmicpc.net
[ 문제 2 ] www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
[ 문제 3 ] www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
[ 문제 4 ] www.acmicpc.net/problem/9093
9093번: 단어 뒤집기
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는
www.acmicpc.net
[ 문제 5 ] www.acmicpc.net/problem/1406
1406번: 에디터
첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수�
www.acmicpc.net
[ 문제 6 ] www.acmicpc.net/problem/10773
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
[ 문제 7 ] www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어��
www.acmicpc.net
[ 스택을 1차원 배열로 구현해서 풀이 ↓ ]
edukoi.tistory.com/132?category=917269
1. 백준 2606 - 바이러스
www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접
edukoi.tistory.com
★ 이제부터 스택 + pair에 대해 알아 보도록 하겠습니다.
edukoi.tistory.com/28?category=841618
4. C++ stack 컨테이너 + pair() - 5문제
♠ c++ stack 컨테이너에 pair()를 이용해서 데이터2개씩 삽입해봅시다
edukoi.tistory.com
'C언어 자료구조' 카테고리의 다른 글
[그래프 - 너비 우선 탐색(BFS)] - 19문제 (0) | 2021.02.16 |
---|---|
[그래프 - 최단거리( 플로이드 )] - 9문제 (0) | 2021.02.16 |
[ 그래프- 최단거리 ( 다익스트라 ) ] - 3문제 (0) | 2021.02.16 |
[큐 1일차] 큐(Queue)란? - 문제 5 (0) | 2020.09.12 |
[트리] 세그먼트(Segment Tree) 트리란? - 비재귀구현 (0) | 2020.07.16 |