stack(배열구현)
#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");
}