스택(Stack)
과큐(Queue)
는 리스트(List) 자료구조의 특별한 경우이다.
Stack
은 후입선출(Last In First Out, LIFO) 구조로
→ 가장 마지막에 넣은 데이터가 스택의 맨 위에 위치하기 때문에 가장 먼저 빼서 사용할 수 있다.
배열과 마찬가지로 Stack에서 데이터를 넣는 것은 Push
라고 하며 데이터를 읽는 것과 동시에 꺼내는것(삭제)을pop
이라고 한다.
스택 자료구조의 대표적 예는 뒤로가기 버튼으로
→ 인터넷 서핑을 할 때 뒤로가기를 누르면 바로 이 전 페이지, 즉 가장 최근의 페이지를 보여준다.
자료구조 Stack의 특징은 : 입력과 출력이 하나의 방향으로 이뤄지는 제한적 접근이라는 것이다.
※ 후입선출(Last In First Out, LIFO) 은 FILO(First In Last Out)이라고도 한다.
ex1) 1, 2, 3, 4 를 차례대로 스택에 넣는다.
stack.push(데이터)
------------------
1 <- 2 <- 3 <- 4
------------------
: 들어간 순서대로 1번이 가장 먼저 들어가고 4번이 마지막으로 들어간다.
ex2) 빈 스택이 될 때까지 데이터를 전부 빼낸다.
stack.pop()
------------------
------------------
4, 3, 2, 1
: 가장 마지막에 있던 데이터부터 차례대로 나오게 된다.
함수 실행 데이터
는 → 스택의 프레임
으로 저장된다.프레임
은 해당 기능에 필요한 데이터가 저장되는 공간 블록을 말한다.변수
를 선언할 때마다 → 새로 선언된 변수
는 스택의 최상위 블록으로 push된다.로컬변수
(value type 또는 프리미티브, 프리미티브 상수), 포인터
및 함수 프레임
이다.1. 새로운 페이지로 접속하면 -> 현재 페이지는 prev stack에 보관한다.
2. 뒤로 가기버튼을 눌러 이전 페이지로 돌아갈 때엔 -> 현재 페이지를 next stack에 보관하고 prev stack에서 가장 나중에 보관된 페이지를 현재 페이지로 가져온다.
3. 앞으로 가기 버튼을 눌르면 - > next stasck에서 가장 마지막으로 보관된 페이지를 가져온다.
4. 마지막으로 현제 페이지를 prev stack에 보관한다.
enqueue
, 데이터를 꺼내는 것을 dequeue
라고 한다.
예1) 1, 2, 3, 4를 큐에 차례대로 넣습니다.
queue.enqueue(데이터)
출력 방향 <---------------------------< 입력 방향
1 <- 2 <- 3 <- 4
<---------------------------<
들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 됩니다.
예2) 큐가 빌 때까지 데이터를 전부 빼냅니다.
queue.dequeue(데이터)
출력 방향 <---------------------------< 입력 방향
<---------------------------<
1, 2, 3, 4
제일 첫 번째 있는 데이터부터 차례대로 나오게 됩니다.
2️⃣ 데이터는 하나씩 넣고 뺄 수 있다.
파워포인트 속 페이지를 순서대로 프린트를 한다고 가정해보자.
컴퓨터 장치들 사이에서 데이터를 주고받을 때, 각 장치 사이의 속도 차이
나 시간 차이
를 극복하기 위해
→ 임시 기억 장치의 자료 구조로 Queue를 사용하고, 이를 통틀어 버퍼(Buffer)라고 한다.
일반적으로 프린터는 속도가 느리고 CPU는 데이터 처리 속도가 빠르다.
따라서 CPU는 빠른 속도로 인쇄에 필요한 데이터를 만든 다음 → 인쇄 작업 Queue 에 저장하고 다른 작업을 수행한다.
프린터는 인쇄 작업 Queue에서 데이터를 받아 → 일정한 속도로 인쇄한다.