스택은 예전에 Assembly 공부하면서 Study 함
참조 링크:
kjt9109.tistory.com/entry/5%EC%9E%A5%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80?category=825870
바로 소스로 들어가자
STACK API
#define STACK_SIZE 50
typedef int Data;
typedef struct __Stack
{
int buf[STACK_SIZE];
int stack_ptr;
} Stack;
void StackInit(Stack *pstack);
void Show_Stack(Stack *pstack);
void SPush(Stack *pstack, Data data);
int sIsEmpty(Stack *pstack);
Data SPop(Stack *pstack);
Data SPeek(Stack *pstack);
StackInit
스택 버퍼 및 스택포인터를 초기화한다.
버퍼는 0으로, 포인터는 -1로 초기화 한다.
Show_Stack
스택 버퍼를 확인 할 수 있도록 출력한다.
SPush
스택에 데이터를 추가한다.
SPop
스택의 데이터를 제거한다. (스택포인터를 기준으로)
SPeek
스택포인터 위치의 데이터를 확인한다.
Stack.c
#include "stack.h"
void StackInit(Stack *pstack)
{
for (int i = 0; i < STACK_SIZE; i++)
{
pstack->buf[i] = 0;
}
pstack->stack_ptr = -1;
}
int sIsEmpty(Stack *pstack)
{
return pstack->stack_ptr;
}
void Show_Stack(Stack *pstack)
{
printf("Show Stack \r\n");
for(int i = 0; i < STACK_SIZE; i++)
{
printf("%d ", pstack->buf[i]);
}
printf("\r\n");
}
void SPush(Stack *pstack, Data data)
{
pstack->stack_ptr++;
if (pstack->stack_ptr < STACK_SIZE)
{
printf("Push Stack \r\n");
pstack->buf[pstack->stack_ptr] = data;
}
else
{
printf("Stack is Full \r\n");
pstack->stack_ptr--;
}
}
Data SPop(Stack *pstack)
{
Data local_buf;
if (sIsEmpty(pstack) < 0)
{
printf("Stack is Empty \r\n");
return -1;
}
else
{
local_buf = pstack->buf[pstack->stack_ptr];
pstack->buf[pstack->stack_ptr--] = 0;
return local_buf;
}
}
Data SPeek(Stack *pstack)
{
if (sIsEmpty(pstack) < 0)
{
printf("Stack is Empty \r\n");
return -1;
}
else
{
return pstack->buf[pstack->stack_ptr];
}
}
Main 함수에서는 간단하게 Push, Pop을 활용하여 출력하였다.
main.c
#include "stack.h"
int main(void)
{
Stack Local_Stack;
StackInit(&Local_Stack);
printf("hello world \r\n");
SPush(&Local_Stack, (Data) 1);
SPush(&Local_Stack, (Data) 2);
SPush(&Local_Stack, (Data) 3);
SPush(&Local_Stack, (Data) 4);
SPush(&Local_Stack, (Data) 5);
Show_Stack(&Local_Stack);
printf("View Pop %d\n", SPop(&Local_Stack));
printf("View Pop %d\n", SPop(&Local_Stack));
printf("View Pop %d\n", SPop(&Local_Stack));
Show_Stack(&Local_Stack);
printf("View Peek %d\n", SPeek(&Local_Stack));
printf("View Peek %d\n", SPeek(&Local_Stack));
printf("View Peek %d\n", SPeek(&Local_Stack));
Show_Stack(&Local_Stack);
printf("View Pop %d\n", SPop(&Local_Stack));
printf("View Pop %d\n", SPop(&Local_Stack));
printf("View Pop %d\n", SPop(&Local_Stack));
printf("View Pop %d\n", SPop(&Local_Stack));
printf("View Pop %d\n", SPop(&Local_Stack));
printf("View Pop %d\n", SPop(&Local_Stack));
Show_Stack(&Local_Stack);
SPush(&Local_Stack, (Data) 7);
SPush(&Local_Stack, (Data) 8);
SPush(&Local_Stack, (Data) 9);
SPush(&Local_Stack, (Data) 10);
SPush(&Local_Stack, (Data) 11);
Show_Stack(&Local_Stack);
return 0;
}
실행화면
'자료구조' 카테고리의 다른 글
Stack - 후위표기법 -1(변환) (0) | 2020.11.12 |
---|---|
Stack - 중위표기법 (괄호 x) (0) | 2020.11.10 |
연결리스트 #2 리스트 추가기능 (0) | 2020.10.16 |
연결 리스트 #1 구현 (0) | 2020.10.15 |
배열 리스트 (0) | 2020.10.10 |