스택 (stack)
스택에 저장된 원소는 top으로 정한 곳에서만 접근 가능
top의 위치에서만 원소를 삽입하므로, 먼저 삽입한 원소는 밑에 쌓이고, 나중에 삽입한 원소는 위에 쌓이는 구조
마지막에 삽입(Last-In)한 원소는 맨 위에 쌓여 있다가 가장 먼저 삭제(First-Out)가 됨 -> 후입선출 구조 (LIFO, Last-In-First-Out)
스택의 push() 알고리즘

스택의 pop() 알고리즘

필요 멤버 및 메서드
멤버 변수
MAX_SIZE: 스택 사이즈
stack: 데이터를 담을 배열
top: 스택 포인터, 초기값 = -1
메서드
isStackEmpty(): 스택이 비어있는지 확인하는 연산
isStackFull(): 스택이 가득 찼는지 확인하는 연산
push(): 스택의 top에 데이터를 삽입하는 연산
pop(): 스택의 top에 데이터를 삭제하는 연산
peek(): 스택의 top에 데이터를 반환하는 연산
printStack(): 스택의 데이터를 출력하는 연산
코드
#define STACK_SIZE 100
typedef int element;
element stack[STACK_SIZE];
main
int top = -1;
int isStackEmpty() {
if (top == -1) {
return 1;
}
else {
return 0;
}
}
int isStackFull() {
if (top == STACK_SIZE) {
return 1;
}
else {
return 0;
}
}
void push(element item) {
if (isStackFull()) {
printf(" Stack is FULL \n");
return;
}
else {
stack[++top] = item;
}
}
element pop() {
if (isStackEmpty()) {
printf(" Stack is Empty \n");
return 0;
}
else {
return stack[top--];
}
}
element peek() {
if (isStackEmpty()) { // 스택이 공백 상태인 경우
printf("\n\n Stack is Empty !\n");
exit(1);
}
else return stack[top]; // 현재 top의 원소 확인
}
// 스택의 원소를 출력하는 연산
void printStack() {
int i;
printf("\n STACK [ ");
for (i = 0; i <= top; i++)
printf("%d ", stack[i]);
printf("] ");
}