반응형
C로 스택을 구현할 때 가장 많이 쓰는 자료구조중 하나가 연결리스트이다. 크기에 제한없이 스택을 사용할 수 있다는 장점이 있으나 메모리 측면에서 배열을 이용했을 때보다 비효율적이다. 연결리스트에 있는 모든 노드에는 항상 자기 이외의 노드를 가리키는 포인터 변수가 1개 이상 존재하기 때문이다.
본 프로그램 코드는 단일 연결리스트 기반으로 만든 스택을 사용자가 직접 이용할 수 있게 만든 것이다. 스택에 들어갈 수 있는 값은 하나의 정수이다.
명령어
push N -> 정수 N을 push한다
pop -> 스택을 pop하고 그 값을 출력한다. 스택이 비어있으면 Stack Empty 출력
size -> 스택의 크기를 출력한다.
top -> top에 위치한 값을 출력한다. 스택이 비어있으면 Stack Empty 출력
print -> 스택 내 모든 값들을 출력한다. 스택이 비어있으면 Stack Empty 출력
exit -> 프로그램 종료
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node { int n; struct Node *next; }NODE; typedef struct { NODE *top; int size; }STACK; void init(STACK *); void push(STACK *, int); void pop(STACK *); void printAll(STACK *); int getSize(STACK *); int isEmpty(STACK *); void top(STACK *); int main(){ STACK *s = (STACK *)malloc(sizeof(STACK)); int n; char order[10]; init(s); while(1){ scanf("%s", order); if (strcmp(order, "push") == 0) { scanf("%d", &n); getchar(); push(s, n); } else if (strcmp(order, "pop") == 0) { pop(s); } else if (strcmp(order, "size") == 0) { printf("size : %d\n", getSize(s)); } else if (strcmp(order, "top") == 0) { top(s); } else if (strcmp(order, "print") == 0) { printAll(s); } else if (strcmp(order, "exit") == 0) { break; } } return 0; } void init(STACK *s) { s->top = NULL; s->size = 0; } void push(STACK *s, int n) { NODE *new_node = (NODE*)malloc(sizeof(NODE)); new_node->n = n; new_node->next = s->top; s->top = new_node; s->size++; printf("Push Success\n"); } void pop(STACK *s) { int result; NODE *tmp; if (isEmpty(s)) { printf("Stack Empty\n"); return; } tmp = s->top; result = tmp->n; s->top = tmp->next; s->size--; free(tmp); printf("pop : %d\n", result); } void printAll(STACK *s) { NODE *i; i = s->top; if (i == NULL) { printf("Stack Empty\n"); return; } while (i != NULL) { printf("%d\n", i->n); i = i->next; } } int getSize(STACK *s) { return s->size; } int isEmpty(STACK *s) { return s->top == NULL; } void top(STACK *s) { if (isEmpty(s)) { printf("Stack Empty\n"); return; } printf("top : %d\n", s->top); }
반응형
'알고리즘창고' 카테고리의 다른 글
[C] 보고 정렬 (bogo sort, stupid sort) (0) | 2018.07.13 |
---|---|
[C] 버블 정렬 (bubble sort) (0) | 2018.07.12 |
[C] 배열 기반 스택 (array stack) (0) | 2018.07.10 |