/**** stack.h ****/
#include <stdbool.h>
void make_empty(void); // 스택 내의 모든 노드를 삭제
bool is_empty(void) ; // 스택이 비어있는지 여부를 반환함
void push(int i); // 정수 i를 스택의 맨 위에 push
int pop(void); // 스택의 맨 위에 있는 정수를 pop
/**** main.c ****/
#include <stdio.h>
#include "stack.h"
int read_number(void);
int main(void) {
int i;
printf("연결 리스트로 스택 짜기\n");
do {
i = read_number();
push(i);
} while (i!=0);
for(;;)
printf("%d ", pop());
}
int read_number(void) {
int i;
printf("숫자 입력(0: 종료): ");
scanf("%d", &i);
return i;
}
/**** stack.c ****/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
struct node {
int value;
struct node *next;
};
/* external variables */
struct node *top = NULL;
void make_empty(void) {
struct node *prev = NULL;
while (p!= NULL) {
prev = top;
top = top->next;
free(prev);
}
}
bool is_empty(void) {
return (top == NULL);
}
void stack_underflow(void) {
printf("stack is empty.\n");
exit(EXIT_FAILURE);
}
void stack_overflow(void) {
printf("cannot allocate memory for new member in stack.\n");
exit(EXIT_FAILURE);
}
bool push(int i) {
struct node *new_top;
new_top = malloc(sizeof(struct node));
if (new_top == NULL)
return false;
new_top->value = i;
new_top->next = top;
top = new_top;
return true;
}
int pop(void) {
struct node *temp;
int pop_value;
if (is_empty())
stack_underflow();
temp = top;
top = top->next;
pop_value = temp->value;
free(temp);
return pop_value;
}
stack(linked list 버전)
2016. 11. 24. 08:50