택배 상하차
, 큐는 은행창구
후입선출
Queue
와의 가장 큰 차이점스택, 큐 모두 리스트 자료구조의 특별한 경우이며, 이들 간에는 공통점과 차이점을 지닌다.
undo(되돌리기)
기능을 구현하면 바로 최근에 실행되었던 작업이 취소가 된다.1) 복귀주소 기억
: 함수의 실행이 끝나면 자신을 호출한 함수로 되돌아간다. 이 때 스택은 복귀할 주소를 기억하는대 사용. 함수는 호출된 역순으로 되돌아가야 하기 때문에.
2) 활성 레코드
: 시스템 스택에는 함수가 호출될 때마다 활성 레코드가 만들어지며, 이곳에서 복귀주소가 저장된다.
복귀 주소
프로그램 카운터
매개변수
함수 안에서 선언된 지역변수
사용 예시 : Undo 기능, 괄호검사, 계산기, 미로탐색 등
1) 스택 ADT(추상데이터타입)
2) 스택의 연산

{
if (top >= MAX_STACK_SIZE - 1) {
stack_full();
return;
}
stack[++top] = item;
// top ++; stack[top] = item;
}
// push(x)
if is_full(S)
then error "overflow"
else top <- top + 1
data[top] <- x
int pop() {
if (top == -1)
return stack_empty();
// int x; x = stack[top]; top--; return x;
return stack[top--];
}
// pop()
if is_empty()
then error "underflow"
else e <- data[top]
top <- top-1
return e
// 스택이 비어있는지 검사하는 함수
int isempty()
{ if (top < 0)
return(1);
else
return(0);
}
// 스택이 가득 차 있는지 검사하는 함수
int isfull()
{ if (top >= MAX_STACK_SIZE -1 )
return(1);
else
return(0);
}
정리하기
let stack = [];
// 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제() - 삽입(1) - 삽입(4) - 삭제()
stack.push(5);
stack.push(2); // [실행 결과]
stack.push(3); // [1, 3, 2, 5]
stack.push(7); // [5, 2, 3, 1]
stack.pop();
stack.push(1);
stack.push(4);
stack.pop();
let reversed = stack.slice().reverse();
console.log(reversed); // 최상단 원소부터 출력 console.log(stack);
#include <iostream> 정의
#include <stack> // stack 라이브러리 사용하겠다고 정의한 것임
using namespace std;
int main(void) {
stack<int> s; // stack 하나 만들고
s.push(7); // push 함수를 이용해 삽입
s.push(5);
s.push(4);
s.pop(); // 꺼내고
s.push(6);
s.pop();
while(!s.empty()) { // stack이 비어있을 때까지
count << s.top() << ' '; // stack 의 가장 위쪽에 있는 데이터를 출력
s.pop(); // 출력 이후 해당 데이터를 꺼내고 확인
}
return 0; // 5 7 출력
}
• 스택을연결리스트로구현하면,삽입과삭제에있어서𝑂 1 을보장할수있다.
• 연결 리스트로 구현할 때는 머리(head)를 가리키는 하나의 개의 포인터만 가진다.
• 머리(head): 남아있는 원소 중 가장 마지막에 들어 온 데이터를 가리키는 포인터
• 삽입할 때는 머리(head) 위치에 데이터를 넣는다.
• 삭제할 때는 머리(head) 위치에서 데이터를 꺼낸다.
• 삽입할 때는 머리(head) 위치에 데이터를 넣는다.
• 값으로 8을 갖는 새로운 데이터가 삽입되었을 때
삽입할 때는 머리(head) 위치에 데이터를 넣는다.
• 값으로 8을 갖는 새로운 데이터가 삽입되었을 때
삽입할 때는 머리(head) 위치에 데이터를 넣는다.
• 값으로 8을 갖는 새로운 데이터가 삽입되었을 때
• 삭제할 때는 머리(head) 위치에서 데이터를 꺼낸다.
• 하나의 데이터를 삭제할 때의
• 삭제할 때는 머리(head) 위치에서 데이터를 꺼낸다.
• 하나의 데이터를 삭제할 때의