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 일 때이다..
소멸을 하진 않았지만 .. 실제로 사용된다면 당연히 소멸도
필요하겟지 ㅎㅎ
반응형