개인 서재..*/알고리즘
[C언어] 스택(feat.배열)
낭만붕어빵
2017. 4. 14. 20:24
반응형
1. ArrayStack.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | //스택 연산을 위한 함수원형 선언// #ifndef ARRAYSTACK_H #define ARRAYSTACK_H #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct tagNode{ ElementType Data; }Node; typedef struct tagArrayStack{ int Top; int Capacity; Node* Nodes; }ArrayStack; void AS_CreateStack(ArrayStack** Stack,int Capacity);//스택 생성 void AS_DestroyStack(ArrayStack* Stack);//스택 소멸 void AS_Push(ArrayStack* Stack,ElementType Data);//Push연산 수행 ElementType AS_Pop(ArrayStack* Stack);//Pop연산 수행 ElementType AS_Top(ArrayStack* Stack);//Top : 최상위 노드에 데이터만 반환 int AS_GetSize(ArrayStack* Stack);//크기 구하기 int AS_IsEmpty(ArrayStack* Stack);//스택이 비어있는지에 대한 유무 검사 int AS_IsFull(ArrayStack* Stack);//비타민퀴즈, 스택이 꽉 차있는지에 대한 유무 #endif | cs |
2. ArrayStack.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | //스택 연산을 위한 함수 몸체 구현// #include "ArrayStack.h" void AS_CreateStack(ArrayStack** Stack,int Capacity){ (*Stack)=(ArrayStack*)malloc(sizeof(ArrayStack)); (*Stack)->Nodes=(Node*)malloc(sizeof(Node)*Capacity); (*Stack)->Top=0; (*Stack)->Capacity=Capacity; } void AS_DestroyStack(ArrayStack* Stack){ free(Stack->Nodes); free(Stack); } void AS_Push(ArrayStack* Stack,ElementType Data){ int Position=Stack->Top; Stack->Nodes[Position].Data=Data; Stack->Top++; } ElementType AS_Pop(ArrayStack* Stack){ int Position=--(Stack->Top); return Stack->Nodes[Position].Data; } ElementType AS_Top(ArrayStack* Stack){ int Position=Stack->Top-1; return Stack->Nodes[Position].Data; } int AS_GetSize(ArrayStack* Stack){ return Stack->Top; } int AS_IsEmpty(ArrayStack* Stack){ return (Stack->Top==0); } int AS_IsFull(ArrayStack* Stack){ return ((Stack->Top)>=(Stack->Capacity)); } | cs |
3. Test_ArrayStack.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | //테스트// #include "ArrayStack.h" int main(){ int i=0,size; ArrayStack* Stack=NULL; scanf("%d",&size); //용량 입력받음 AS_CreateStack(&Stack,size); while(! AS_IsFull(Stack)){ scanf("%d",&i); AS_Push(Stack,i); } printf("스택이 다 찼습니더!\n"); /* AS_Push(Stack,3); AS_Push(Stack,37); AS_Push(Stack,11); AS_Push(Stack,12); */ printf("Capacity : %d, Size : %d, Top: %d\n",Stack->Capacity,AS_GetSize(Stack),AS_Top(Stack)); for(i=0;i<size;i++){ if(AS_IsEmpty(Stack)){ break; } printf("Popped : %d\n",AS_Pop(Stack)); if(! AS_IsEmpty(Stack)) printf("Current Top: %d\n",AS_Top(Stack)); else printf("Stack is Empty\n"); } AS_DestroyStack(Stack); return 0; } | cs |
실행 결과
반응형