언어

stack(배열구현)

파아랑새 2016. 1. 25. 08:36

#include<stdio.h>
#include<string.h>
#define EMPTY 0
#define FULL 1
#define STACK_SIZE 10
typedef int element_int_;
typedef struct
{
 element_int_ data[STACK_SIZE];
 int top;
}StackType,*StackTypePointer;
// <<< FUNCTION >>>
void Initialize(StackTypePointer s);//[1]
int is_FULL(StackTypePointer s);//[2]
int is_EMPTY(StackTypePointer s);//[3]
void Push_STACK(StackTypePointer s);//[4]
element_int_ Pop_STACK(StackTypePointer s);//[5]
void data_printf(StackTypePointer s);//[6]
void main()
{
 StackType stack;
 Initialize(&stack);
 Push_STACK(&stack);
 Push_STACK(&stack);
 Push_STACK(&stack);
 Push_STACK(&stack);
 Push_STACK(&stack);
 Push_STACK(&stack);
 Push_STACK(&stack);
 Push_STACK(&stack);
 Push_STACK(&stack);
 data_printf(&stack);
 Pop_STACK(&stack);
 data_printf(&stack);
}
void Initialize(StackTypePointer s)//[1]
{
 memset(s->data, 0, sizeof(int)*STACK_SIZE);
 s->top = -1;
}
int is_FULL(StackTypePointer s)//[2]
{
 if (s->top == STACK_SIZE - 1)
 {
  printf("더 이상 데이터를 추가하실 수 없습니다.\n");
  return FULL;
 }
 else
 //(s->top != STACK_SIZE - 1)
 {
  return EMPTY;
 }
}
int is_EMPTY(StackTypePointer s)//[3]
{
 if (s->top == - 1)
 {
  printf("데이터가 비어있습니다.\n");
  return EMPTY;
 }
 else
 //(s->top != -1)
 {
  return 1;
 }
}
void Push_STACK(StackTypePointer s)//[4]
{
 int newElement_data = 0;
 if (is_FULL(s) == FULL)
 {
  return;//END
 }
 printf("삽입할 데이터 입력>>> ");
 scanf_s("%d", &newElement_data);
 s->data[++(s->top)] = newElement_data;
}
element_int_ Pop_STACK(StackTypePointer s)//[5]

 if (is_EMPTY(s) == EMPTY)
 {
  return 0;
 }
 printf("삭제할 데이터는 [%d]입니다.\n", s->data[(s->top)--]);
}
void data_printf(StackTypePointer s)//[6]
{
 int index;
 if (is_EMPTY(s) == EMPTY)
 {
  return;//END
 }
 for (index = 0; index <= s->top; index++)
 {
  printf("%d ", s->data[index]);
 }
 printf("\n");
}