출처 : http://www.embeddedworld.co.kr/article/view_serial.asp?se=65&article_idx=10094
정재준님께서 연재하신 C 알고리즘 스택 부분 소스 코드입니다.
pop()함수에서 인덱싱 감소가 빠져있어서 그부분만 수정되었습니다.
요약
스택은 마지막으로 입력된 데이터가 첫 번째로 출력되는 LIFO(Last In First Out)형의 자료구조이다. 스택에 입력되는 데이터는 여러 가지 형태가 있을 수 있다. 스택의 동작은 보통 3가지(push, pop, stack top)로 구분된다.
● push 동작은 스택의 top에 새로운 데이터를 입력(추가)한다.
● pop 동작은 스택의 top에 있는 데이터를 출력(제거)한다.
[sourcecode language="C"]
//
// Source: 배열을사용하여스택구현
// Compiler: Standard C
//
#include
#define STACKSIZE 100
typedef struct {
int size;
int items[STACKSIZE];
} STACK;
void push (STACK *ps, int x)
{
if (ps->size == STACKSIZE) {
printf("Error: stack overflow\n");
return;
} else
ps->items[ps->size++] = x;
}
int pop (STACK *ps)
{
if (ps->size == 0){
printf("Error: stack underflow\n");
return -1;
} else
return ps->items[--ps->size];
}
int main ()
{
STACK *ps;
ps = (STACK*)malloc (sizeof(STACK));
ps->size = 0;
printf ("size of stack = %d\n", sizeof(STACK));
push (ps, 10);
push (ps, 20);
push (ps, 30);
push (ps, 40);
printf ("%d\n", pop (ps));
printf ("%d\n", pop (ps));
printf ("%d\n", pop (ps));
printf ("%d\n", pop (ps));
free (ps);
printf("Press Any Key...");
getchar();
}
[/sourcecode]