CS/자료구조

C언어 자료구조 배열로 구현된 스택의 삽입/삭제

컨설턴트X 2023. 5. 3. 13:45
728x90
반응형
#include <stdio.h>
#include <stdlib.h>

int stack[10];
int top = -1;

void push(int item) {
	if (top >= 9) {
		printf("\n stack is full ! \n");
		return;
	}
	else stack[++top] = item;
}

int pop() {
	if (top == -1) {
		printf("\n stack is empty!!\n");
		return 0;
	}
	else
		return stack[top--];
}

void del() {
	if (top == -1) {
		printf("\n stack is empty !\n");
		exit(1);
	}
	else top--;
}

int peek() {
	if (top == -1) {
		printf("\n stack is empty !\n");
		exit(1);
	}
	else return stack[top];
}

void printstack() {
	int i;
	printf("\n stack [ ");
	for (i = 0; i <= top; i++)
		printf("%c ", stack[i]);
	printf("] ");
}

int main() {

	char item;
	printstack();
	push('A');
	printstack();
	push('B');
	printstack();
	push('C');
	printstack();

	item = peek();
	printstack();
	printf("peek top => %c\n", item);

	del();
	printstack();

	item = pop();
	printstack();
	printf("\t pop top => %c\n", item);

	item = pop();
	printstack();
	printf("\t pop top => %c\n", item);

	pop();
}

이 코드는 스택 자료구조를 구현하는 예제입니다.

여기서 스택이란 데이터를 일시적으로 저장하기 위한 자료구조로, 마지막에 저장된 데이터가 가장 먼저 꺼내질 수 있는 구조를 가지고 있습니다. 

이 스택 구현 예제는 배열을 이용하여 구현되었습니다. 스택은 배열의 끝에서 삽입과 삭제가 이루어지기 때문에 top이라는 변수를 이용하여 마지막에 저장된 데이터의 인덱스를 가리키도록 합니다.

push 함수는 스택에 데이터를 삽입하는 함수입니다. top 변수가 9보다 크면 스택이 가득 찬 것으로 판단하고 메시지를 출력하며 함수를 종료합니다. 그렇지 않다면 top 변수를 1 증가시키고 stack 배열의 top 인덱스에 데이터를 저장합니다.

pop 함수는 스택에서 데이터를 꺼내는 함수입니다. top 변수가 -1이면 스택이 비어있다는 것으로 판단하고 메시지를 출력하며 0을 반환합니다. 그렇지 않으면 top 인덱스에 저장된 데이터를 반환하고 top 변수를 1 감소시킵니다.

del 함수는 스택에서 데이터를 삭제하는 함수입니다. top 변수가 -1이면 스택이 비어있다는 것으로 판단하고 메시지를 출력하며 프로그램을 종료합니다. 그렇지 않으면 top 변수를 1 감소시킵니다.

peek 함수는 스택에서 마지막에 저장된 데이터를 반환하는 함수입니다. top 변수가 -1이면 스택이 비어있다는 것으로 판단하고 프로그램을 종료합니다. 그렇지 않으면 top 인덱스에 저장된 데이터를 반환합니다.

printstack 함수는 스택에 저장된 모든 데이터를 출력하는 함수입니다. 스택의 처음부터 top 변수가 가리키는 인덱스까지 반복하면서 데이터를 출력합니다.

main 함수에서는 우선 스택을 초기화하고 'A', 'B', 'C'를 순서대로 push하여 스택에 데이터를 저장합니다. 그리고 peek 함수를 이용하여 스택의 top 인덱스에 저장된 데이터를 반환하고 pop 함수를 이용하여 스택에서 데이터를 꺼내어 출력합니다. 마지막으로 pop 함수를 한 번 더 호출하면 스택이 비어있으므로 메시지를 출력하게 됩니다.

728x90
반응형