스택

Lil_Young·2022년 11월 7일
0

자료구조

목록 보기
2/9

스택 (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("] ");
}
profile
Beginner_Developer

0개의 댓글