Algorithm

Stack 자료구조

다크엔지니어 2020. 2. 22. 22:41
반응형

자료구조인 Stack 에 관하여 코딩을 해보았다.

Stack 은 보통 History 나 보관용에 자주 사용된다.

펌웨어 분야에서는 context switching 시 task 를 switching 할 때 stack 영역에 옮겨 다시 가져가는 

작업이 필요한데 그때 도 사용이 된다.

#include <stdio.h>
#include <stdlib.h>

#define STACK_SIZE 7

typedef struct stack
{
	int _stack[STACK_SIZE];
	int top;
}Stack;

Stack *StackCreate()
{
	Stack *q = (Stack*)malloc(sizeof(Stack));
	q->top = -1;

	return q;
}

bool Empty(Stack *q)
{
	if (q->top < 0)
		return 1;
	else
		return 0;
}

bool Full(Stack *q)
{
	if (q->top == STACK_SIZE-1)
		return 1;
	else
		return 0;
}

void Push(Stack *q, int nVal)
{
	if (Full(q))
	{
		printf("Stack Size Full\n");
		return;
	}
	else
	{
		q->_stack[++(q->top)] = nVal;
	}
}

void Pop(Stack *q)
{
	if (Empty(q))
	{
		printf("Stack Size Empty\n");
		return;
	}
	else
	{
		q->_stack[--(q->top)];
	}
}

void Print(Stack *q)
{
	if (Empty(q))
	{
		printf("Stack Size Empty\n");
		return;
	}
	
	int i;
	int j = q->top;
	printf("stack = ");
	for (i = 0; i <= j; i++)
	{
		printf("%3d", q->_stack[i]);
	}
	printf("\n");
}

int main(void)
{
	Stack *st = StackCreate();
	
	Print(st);

	Push(st, 1); Print(st);
	Push(st, 2); Print(st);
	Push(st, 3); Print(st);
	Push(st, 4); Print(st);
	Push(st, 7); Print(st);
	Push(st, 8); Print(st);
	Push(st, 9); Print(st);
	
	Pop(st); Print(st);
	Pop(st); Print(st);
	Pop(st); Print(st);
	Pop(st); Print(st);
	Pop(st); Print(st);
	Pop(st); Print(st);

	getchar();

	return 0;
}

 

간단하게 만들어 보았으며, struct 를 이용해 만들어 보았다.

Top 는 시작을 -1 로 하였으며 현재 가리키는 stack Point 는 Full 이 될것이며 어셈블리 명령어로는 stdfd 로 볼 수있다.

물론 arm mode 일 때이다..

소멸을 하진 않았지만 .. 실제로 사용된다면 당연히 소멸도

필요하겟지 ㅎㅎ

반응형