Chater 4-1. 스택
카테고리: DataStructure2
태그: C Data Structure Algorithm
홍정모 교수님의 강의 홍정모의 따라하며 배우는 C언어(부록) 를 듣고 정리한 필기입니다. 😀
Chapter 4. 스택
🚀 C언어로 스택 구현하기 (배열 사용)
📜element.h
typedef struct
{
int data;
}element;
📜stack.h
#include "element.h"
#include <stdbool.h>
#define MAX_STACK_SIZE 5
typedef struct stack
{
element items[MAX_STACK_SIZE];
int top;
}Stack;
void Initialize(Stack* stack);
bool IsFull(const Stack* stack);
bool IsEmpty(const Stack* stack);
void Push(Stack* stack, element item);
element Pop(Stack* stack);
📜stack.c
#include "stack.h"
void Initialize(Stack* stack)
{
stack->top = -1;
// allocate memory if dynamic array is used;
}
bool IsFull(const Stack* stack)
{
if (stack->top == MAX_STACK_SIZE - 1)
return true;
else
return false;
}
bool IsEmpty(const Stack* stack)
{
if (stack->top == - 1)
return true;
else
return false;
}
void Push(Stack* stack, element item)
{
if (IsFull(stack) == true)
printf("Stack is full. Cannot add.\n");
else
{
// memcpy(&stack->items[++stack->top], &item, sizeof(item));
stack->items[++stack->top] = item;
}
}
element Pop(Stack* stack)
{
if (IsEmpty(stack) == true)
{
printf("Stack is empty. Cannot remove.\n");
element temp = { -1 }; // -1을 반환하기 위한 dummy
return temp;
}
return stack->items[stack->top--];
}
📜main.c
print_stack(const Stack* stack)
{
printf("Stack : ");
if (IsEmpty(stack) == true)
printf("Empty");
else
for (int i = 0; i <= stack->top; ++i)
printf("%d", stack->items[i].data);
printf("\n");
}
element get_element(const int data)
{
element new_element;
new_element.data = data;
return new_element;
}
int main()
{
Stack my_stack;
Initialize(&my_stack);
print_stack(&my_stack);
Push(&my_stack, get_element(1));
print_stack(&my_stack); // 1
Push(&my_stack, get_element(3));
print_stack(&my_stack); // 1 3
Push(&my_stack, get_element(4));
print_stack(&my_stack); // 1 3 4
Push(&my_stack, get_element(5));
print_stack(&my_stack); // 1 3 4 5
Push(&my_stack, get_element(6));
print_stack(&my_stack); // 1 3 4 5 6
Push(&my_stack, get_element(7));
print_stack(&my_stack); // 1 3 4 5 6 (꽉차서 7은 안들어감)
for (int i = 0; i < MAX_STACK_SIZE + 1; ++i)
{
printf("Pop : %d\n", Pop(&my_stack).data);
print_stack(&my_stack);
}
}
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기