/**** 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;
}


+ Recent posts