Chater 4-1. 스택

Date:     Updated:

카테고리:

태그:

홍정모 교수님의 강의 홍정모의 따라하며 배우는 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);
	}
}

image



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

DataStructure2 카테고리 내 다른 글 보러가기

댓글 남기기