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