Stack ADT 정의파일
// // Stack.c // Stack // // Created by Skia on 2015. 7. 30.. // Copyright (c) 2015년 Skia. All rights reserved. // #include "Stack.h" void CreateS(Stack* stack){ stack->top = -1; } Bool IsEmpty(Stack* stack){ if ( stack->top < 0 ) { return TRUE; } return FALSE; } Bool IsFull(Stack* stack){ if(stack->top >= MAX_STACK_SIZE-1){ return TRUE; } return FALSE; }// top >= MAX_STACK_SIZE-1 void Push(Stack* stack, element item){ if(IsFull(stack)){ fprintf(stderr, "Error! Stack is FULL\n"); } else{ stack->item[++stack->top] = item; } } element Pop(Stack* stack){ element temp; if(IsEmpty(stack)){ fprintf(stderr, "Error! Stack is EMPTY\n"); } else{ temp = stack->item[stack->top]; stack->item[stack->top].key = 0; stack->top--; } return temp; }Stack ADT 헤더파일
// // Stack.h // Stack // // Created by Skia on 2015. 7. 30.. // Copyright (c) 2015년 Skia. All rights reserved. // #ifndef __Stack__Stack__ #define __Stack__Stack__ #include <stdio.h> #include <stdlib.h> #define MAX_STACK_SIZE 4 /* maximum stack size */ typedef enum { FALSE = 0, TRUE = 1} Bool; typedef struct { int key; char name[10]; /* other fields*/ }element; typedef struct { int top; element item[MAX_STACK_SIZE]; }Stack; void CreateS(Stack* stack); Bool IsEmpty(Stack* stack); // top < 0 Bool IsFull(Stack* stack); // top >= MAX_STACK_SIZE-1 void Push(Stack* stack, element item); element Pop(Stack* stack); #endif /* defined(__Stack__Stack__) */Main , ADT 테스트 파일
// // main.c // Stack // // Created by Skia on 2015. 7. 30.. // Copyright (c) 2015년 Skia. All rights reserved. // #include "Stack.h" #include <string.h> int main(int argc, const char * argv[]) { Stack stack; element item; int i; CreateS(&stack); item.key = 10; strcpy(item.name,"Vincent"); Push(&stack, item); item.key = 12; strcpy(item.name,"Penny"); Push(&stack, item); item.key = 3; strcpy(item.name,"Finn"); Push(&stack, item); item.key = 5; strcpy(item.name,"Jake"); Push(&stack, item); printf("Current top : %d\n",stack.top); for (i = 0; i < stack.top+1; i++){ printf("stack [%d] key : %d / name : %s", i,stack.item[i].key,stack.item[i].name); printf("\n"); } item.key = 7; strcpy(item.name,"Zedd"); Push(&stack, item); printf("\nNow we're goonna retrive a data\n"); Pop(&stack); Pop(&stack); printf("Current top : %d\n",stack.top); for (i = 0; i < stack.top+1; i++){ printf("stack [%d] key : %d / name : %s", i,stack.item[i].key,stack.item[i].name); printf("\n"); } Pop(&stack); Pop(&stack); Pop(&stack); return 0; }
실행결과 :
Current top : 3
stack [0] key : 10 / name : Vincent
stack [1] key : 12 / name : Penny
stack [2] key : 3 / name : Finn
stack [3] key : 5 / name : Jake
Error! Stack is FULL
Now we're goonna retrive a data
Current top : 1
stack [0] key : 10 / name : Vincent
stack [1] key : 12 / name : Penny
Error! Stack is EMPTY
책에서는 Stack ADT를 Global Area에 정의하였다.
하지만 이는 추후에 사용하기 어렵다는 점을 고려하여 지역변수로 설정하게끔 struct를 하나 더 정의하고 기타 몇몇 부분 수정하였다.
또한 함수를 정의할 때 변수 변경의 용이성을 위해 주소를 통해 값을 전달하게끔 하였다.
'CS > 자료구조' 카테고리의 다른 글
Fundamentals of Data Structure - Tree Traversal (0) | 2015.08.04 |
---|---|
Fundamentals of Data Structure - ADT 5.1 (0) | 2015.08.04 |
Fundamentals of Data Structure - ADT 3.2 (0) | 2015.07.30 |
Fundamentals of Data Structure - p11(program 1.4) (0) | 2015.07.23 |
친구관계정리 - Dijkstra / Graph / List (2) | 2015.07.13 |