반응형
배열로 만든 스택은 연결리스트에 비해 매우 간단해서 좋다. 그래서 빠르게 코딩을 해야할 때 자주 사용한다. 하지만 C++에는 stack 헤더가 있다.
배열로 구현할 때의 장점은 연결리스트에 비해 메모리를 아낄 수 있다는 점, 그리고 구조가 간단하다..! 제한을 걸어놓은 과제나 문제를 풀 때 용이하다. 단점은 크기가 제한되어 있다는 것. 하지만 realloc이 있다면?
연결리스트로 구현했던 코드와 다른 점은 실행하고 명령어 입력 전에 스택의 크기를 먼저 입력한다.
명령어
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> int N; // MAX_SIZE int top = 0; void push(int *, int); int pop(int *); void printAll(int *); int getSize(int *); int isEmpty(int *); int getTop(int *); int main(){ int *s; int n; int i; char order[10]; printf("MAX STACK SIZE : "); scanf("%d", &N); s = (int *)malloc(sizeof(int) * N); while (1) { scanf("%s", order); if (strcmp(order, "push") == 0) { scanf("%d", &n); getchar(); push(s, n); } else if (strcmp(order, "pop") == 0) { if (isEmpty(s)) { printf("Stack Empty\n"); } else { printf("pop : %d\n", pop(s)); } } else if (strcmp(order, "size") == 0) { printf("size : %d\n", getSize(s)); } else if (strcmp(order, "top") == 0) { if (isEmpty(s)) { printf("Stack Empty\n"); } else { printf("top : %d\n", getTop(s)); } } else if (strcmp(order, "print") == 0) { printAll(s); } else if (strcmp(order, "exit") == 0) { break; } } return 0; } void push(int *s, int n) { if (N <= top) { printf("Stack FULL\n"); return; } s[top++] = n; } int pop(int *s) { top--; return s[top]; } void printAll(int *s) { int i; if (isEmpty(s)) { printf("Stack Empty\n"); return; } for (i = 0; i < top; i++) { printf("%d\n", s[i]); } } int getSize(int *s) { return top; } int isEmpty(int *s) { return top == 0; } int getTop(int *s) { return s[top - 1]; }
반응형
'알고리즘창고' 카테고리의 다른 글
[C] 보고 정렬 (bogo sort, stupid sort) (0) | 2018.07.13 |
---|---|
[C] 버블 정렬 (bubble sort) (0) | 2018.07.12 |
[C] 단일연결리스트 기반 스택 (single linked list stack) (0) | 2018.07.09 |