컴공 일기103
게시글 주소: https://orbi.kr/00057410624
"Stack"이라는 자료구조를 배열로 구현한 예제입니다.
#include <stdio.h>
#include <stdlib.h>
typedef struct tagNode
{
int Data;
}Node;
typedef struct tagArrayStack
{
int Capacity;
int Top;
Node* Nodes;
} ArrayStack;
void AS_CreatStack(ArrayStack** Stack, int Capacity)
{
(*Stack) = (ArrayStack*)malloc(sizeof(ArrayStack));
(*Stack)->Nodes = (Node*)malloc(sizeof(Node) * Capacity);
(*Stack)->Capacity = Capacity;
(*Stack)->Top = 0;
}
void AS_DestroyStack(ArrayStack* Stack)
{
free(Stack->Nodes);
free(Stack);
}
void AS_Push(ArrayStack* Stack, int Data)
{
int Position = Stack->Top;
Stack->Nodes[Position].Data = Data;
Stack->Top++;
}
int AS_Pop(ArrayStack* Stack)
{
int Position = --(Stack->Top);
return Stack->Nodes[Position].Data;
}
int AS_Top(ArrayStack* Stack)
{
int Position = Stack->Top - 1;
return Stack->Nodes[Position].Data;
}
int AS_GetSize(ArrayStack* Stack)
{
return Stack->Top;
}
bool AS_IsEmpty(ArrayStack* Stack)
{
return (Stack->Top == 0);
}
int main()
{
int i = 0;
ArrayStack* Stack = NULL;
AS_CreatStack(&Stack, 10);
AS_Push(Stack, 3);
AS_Push(Stack, 37);
AS_Push(Stack, 11);
AS_Push(Stack, 12);
printf("Capacity : %d, Size : %d, Top: %d\n\n", Stack->Capacity, AS_GetSize(Stack), AS_Top(Stack));
for (i = 0; i < 4; i++)
{
if (AS_IsEmpty(Stack))
{
break;
}
printf("Popped : %d, ", AS_Pop(Stack));
if (!AS_IsEmpty(Stack))
printf("Current Top : %d\n", AS_Top(Stack));
else
printf("Stack is Empty.\n");
}
AS_DestroyStack(Stack);
return 0;
}
[실행결과]
Capacity : 10, Size : 4, Top: 12
Popped : 12, Current Top : 11
Popped : 11, Current Top : 37
Popped : 37, Current Top : 3
Popped : 3, Stack is Empty.
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
좋아요 1 답글 달기 신고
-
좋아요 1 답글 달기 신고