Algorithm and Data Structure

C언어 연결리스트로 스택(Stack) 구현

코딩준우 2023. 12. 18. 17:57
#include <stdio.h>
#include <stdlib.h>


typedef struct Node {
	int val;
	struct Node* prev;
}Node;

typedef struct Stack {
	Node* top;
	int size;
}Stack;


Stack* stack;


Node* make_node(int val) {
	Node* node = (Node*)malloc(sizeof(Node));
	node->val = val;
	node->prev = NULL;
	return node;
}


void init_stack() {
	stack->top = NULL;
	stack->size = 0;
}


int top() {
	if (stack->size == 0) return -1;
	return stack->top->val;
}

void push(int val) {
	Node* top = stack->top;
	Node* node = make_node(val);
	node->prev = top;
	stack->top = node;
	++stack->size;
}

void pop() {
	if (stack->size == 0) return;
	Node* top = stack->top;
	stack->top = top->prev;
	free(top);
	--stack->size;
}

int size () {
	return stack->size;
}

void print() {
	Node* top = stack->top;
	while(top != NULL) {
		printf("%d ", top->val);
		top = top->prev;
	}
	printf("\n");
}

void delete_memory() {
	Node* top = stack->top;
	while(top != NULL) {
		Node* prev = top->prev;
		free(top);
		top = prev;
	}
	free(stack);
}


int main(int argc, char** argv) {
	stack = (Stack*)malloc(sizeof(Stack));

	for (int i = 0; i < 5; ++i) {
		push(i);
	}
	print();

	for (int i = 0; i < 3; ++i){
		pop();
	}
	print();

	delete_memory();
	return 0;
}