//스택 : 후입선출
//큐 : 선입선출
//배열로 스택 구현
//pust (삽입), pop(제거)
#include <stdio.h>
#include <stdlib.h>
typedef struct tagNode {
int Data;
}Node;
// 배열의 용량, 최상위 노드의 위치, 노드의 배열
typedef struct tagArrayStack {
int Capacity; // 용량
int Top; // 최상위 노드위치
Node *Nodes; // 노드 배열
}ArrayStack;
void CreateStack(ArrayStack** Stack, int Capacity) {
// 스택을 자유 저장소에 생성
(*Stack) = (ArrayStack*)malloc(sizeof(ArrayStack));
//입력된 Capacity만큼 노드를 자유 저장소에 생성
(*Stack)->Nodes = (Node*)malloc(sizeof(Node)*Capacity);
//Capacity 및 Top 초기화
(*Stack)->Capacity = Capacity;
(*Stack)->Top = 0;
}
void DestroyStack(ArrayStack* Stack) {
//노드를 자유 저장소에서 해제
free(Stack->Nodes);
//스택을 자유 저장소에서 해제
free(Stack);
}
void Push(ArrayStack* Stack, int Data) {
int Position = Stack->Top;
Stack->Nodes[Position].Data = Data;
Stack->Top++;
}
int Pop(ArrayStack* Stack) {
int Position = --(Stack->Top);
/*Stack->Top = Stack->Top-1;
int Position = Stack->Top;
*/
return Stack->Nodes[Position].Data;
}
int Top(ArrayStack* Stack) {
int Position = Stack->Top-1;
return Stack->Nodes[Position].Data;
}
int GetSize(ArrayStack* Stack) {
return Stack->Top;
}
int IsEmpty(ArrayStack* Stack) {
return(Stack->Top == 0);
}
void main() {
ArrayStack* Stack = NULL;
CreateStack(&Stack, 10);
Push(Stack, 3);
Push(Stack, 37);
Push(Stack, 11);
Push(Stack, 12);
printf("Capacity : %d, Size : %d, Top : %d\n\n", Stack->Capacity, GetSize(Stack), Top);
for (int i = 0; i < 4; i++) {
if (IsEmpty(Stack)) break;
printf("Popped: %d, ", Pop(Stack));
/*
IsEmpty 값이 있을 때 : 0
IsEMpty 값이 없을 때 : 1
*/
if (!IsEmpty(Stack))
printf("Current Top : %d\n", Top(Stack));
else printf("Stack is Empty.\n");
}
DestroyStack(Stack);
system("pause");
}
댓글 없음:
댓글 쓰기