Data_structure

(Data_structure) Stack

K_Hyul 2023. 9. 25. 14:26
728x90

Fig.1 Stack 구조

 

Stack은 LIFO구조 즉, 최근에 입력된게 먼저 나오는 구조이다.

Stack에는 기본적으로 .push(), .pop() 함수가 존재하고 필요에 따라 .top(), empty() 가 있다.

push는 말 그대로 이 구조에 입력하는 것이고

pop은 제일 위에 있는 것을 꺼내는 것이다.

top은 제일 위에 있는 것에 대한 정보를 출력하고

empty는 현재 비어있는지 확인하는 함수이다.

 

밑에 코드는 Wikipedia에서 공유된 C 코드이다.

다음은 윈도우 기준의 C언어로 제작된 스택의 예제이다.

/* Stack Example */

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

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

int push(int dat);
int pop(void);
int printstack(void);

int main(void) {
	int inval, innum;
	printf(" - Algorithm Stack - \n");
	printf("Made by POM(lovebeen04@gmail.com)\n");
	printf("=================================\n");
	printf("1. Push Value\n");
	printf("2. Pop Value\n");
	printf("3. Print Stack\n");
	printf("4. Exit\n");
	printf("=================================\n");
	printf("> Enter Number: ");
	scanf("%d", &inval);

	switch(inval) {
		case 1:
			system("cls");
			printf("> Enter Number: ");
			scanf("%d", &innum);
			push(innum);
			break;
		case 2:
			pop();
			break;
		case 3:
			printstack();
			break;
		case 4:
			system("pause");
			break;
		default:
			system("cls");
			printf(" Error\n");
			break;
	}

	return 0;
}

int push(int dat) {
	if(top >= 9) {
		system("cls");
		printf("Stack Overflow\n");
		getch();
		system("cls");
		main();
	} else {
		top++;
		Stack[top] = dat;
		system("cls");
		printf("Push %d\n", dat);
		getch();
		system("cls");
		main();
	}
}

int pop(void) {
	system("cls");
	if(top <= -1) {
		system("cls");
		printf("Stack Downflow\n");
		getch();
		system("cls");
		main();
	} else {
		Stack[top] = 0;
		top--;
		main();
	}
}
int printstack(void) {
	int a;
	system("cls");
	printf("=================================\n");
	for(a=9; a>=0; a--) printf("%d\n", Stack[a]);
	printf("=================================\n");
	getch();
	system("cls");
	main();
}

 

 

출처 : https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%83%9D

728x90