300x250
C언어 - 스택(stack) push, pop
** C언어 스택에 대한 예제입니다.
- push와 pop에 대해서 별도로 함수를 구현하여 만들었습니다.
#include<stdio.h>
#define MAX_STACK_SIZE 10
typedef struct { //스택의 값을 저장할 구조체 선언
int key;
char grade;
}element;
int top = -1; //전역변수
element stack[MAX_STACK_SIZE]; //전역변수 - 값을 저장할 배열
void push(element data);
element pop();
main()
{
element data;
int i, n, cond = 1;
i = 0;
while (cond) {
printf("데이터 입력: ");
scanf("%d %c", &data.key, &data.grade);
if (data.key != 0)
{
push(data); //함수호출하여 입력한 값을 저장한다
i++;
}
printf("스택에 데이터를 계속 입력하실래요?(1/0)");
scanf("%d", &cond);
}
printf("스택에서 몇개의 데이터가 필요하세요 ? ");
scanf("%d", &n);
for (i = 0; i < n; i++) {
data = pop(); //함수호출하여 입력한 값을 출력
printf("%d\t%c\n", data.key, data.grade);
}
}
void push(element item)
{
if (top >= MAX_STACK_SIZE - 1)
printf("Stack is overflow!!!\n");
else {
top++;
stack[top] = item;
}
}
element pop()
{
if (top == -1)
printf("Stack is empty!!!\n");
else
return stack[top--]; //값을 리턴한 이후에 top의 값이 1 줄어든다
}
** C언어 스택 출력 결과
** LIFO (Last-In Fisrt Out) - 후입선출 구조의 스택은 입력할 때는 차곡 차곡 쌓이지만 출력할 때는 가장 상단(top)에 있는 값이 출력되어 나온다
그래서 1 2 3 4 5 순으로 입력했을 때 5 4 3 2 순으로 출력되어 나온 이유이다
반응형
'C & Docker & LINUX' 카테고리의 다른 글
C언어 - 단순 연결 리스트 (0) | 2016.06.04 |
---|---|
리눅스 -quotacheck 허가거부, cannot guess foromat from fiilename 에러 (0) | 2016.06.01 |
C언어 테트리스 3. 벽돌을 그리는 원리 (0) | 2016.05.21 |
C언어 테트리스 2. 커서의 위치 정보 얻어오기 (0) | 2016.05.21 |
C언어 테트리스 1. 커서 위치의 이동 (0) | 2016.05.21 |