2. 스택

2021. 4. 9. 23:19· 알고리즘/이론
반응형
#pragma once
#ifndef ARRAYSTACK_H
#define ARRAYSTACK_H

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

typedef int ElementType;

typedef struct tagNode {
	ElementType Data;
} Node;

typedef struct tagArrayStack {
	int Capacity;
	int Top;
	Node* Nodes;
}ArrayStack;

void AS_CreateStack(ArrayStack** Stack, int Capacity);
void AS_DestroyStack(ArrayStack* Stack);
void AS_Push(ArrayStack* Stack, ElementType Data);
ElementType AS_Pop(ArrayStack* Stack);
ElementType AS_Top(ArrayStack* Stack);
int As_GetSize(ArrayStack* Stack);
int AS_IsEmpty(ArrayStack* Stack);

#endif
#include "ArrayStack.h"

void AS_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 AS_DestroyStack(ArrayStack* Stack) {
	/* 노드를 자유 저장소에서 해제 */
	free(Stack->Nodes);

	/* 스택을 자유 저장소에서 해제 */
	free(Stack);
}

void AS_Push(ArrayStack* Stack, ElementType Data) {
	int Position = Stack->Top;

	Stack->Nodes[Position].Data = Data;
	Stack->Top++;
}

ElementType AS_Pop(ArrayStack* Stack) {
	int Position = --(Stack->Top);

	return Stack->Nodes[Position].Data;
}

ElementType AS_Top(ArrayStack* Stack) {
	int Position = Stack->Top - 1;

	return Stack->Nodes[Position].Data;
}

int AS_GetSize(ArrayStack* Stack) {
	return Stack->Top;
}

int AS_IsEmpty(ArrayStack* Stack) {
	return (Stack->Top == 0);
}

int main() {
	int i = 0;
	ArrayStack* Stack = NULL;

	AS_CreateStack(&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("Poped : %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;
}
반응형

'알고리즘 > 이론' 카테고리의 다른 글

9. 그래프  (0) 2021.04.11
4. 트리  (0) 2021.04.10
3. 큐  (0) 2021.04.10
이진 탐색  (0) 2021.04.07
1.리스트  (0) 2021.02.04
'알고리즘/이론' 카테고리의 다른 글
  • 4. 트리
  • 3. 큐
  • 이진 탐색
  • 1.리스트
오뚜깅
오뚜깅
오뚜깅
오뚜깅
오뚜깅
전체
오늘
어제
  • 분류 전체보기
    • 취업인생
    • Programming
      • C & C++
      • Python
      • OpenCV
      • PCL
      • ROS
      • Deep learning
      • Network
    • 알고리즘
      • 이론
      • 백준(BOJ)
      • 프로그래머스(Programmers)
    • Project
    • IT
      • 우분투
    • 일상
      • 말씀 묵상
      • 끄적임
      • 영어 일기

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 2292
  • PointCloudLibrary
  • 우분투
  • cudaversion
  • DeepLearning
  • OtsuAlgorithm
  • imageclustering
  • cv_bridge
  • c++code
  • pointcloud
  • CuDNN
  • 백준2798
  • opencv
  • 딥러닝환경구축
  • kmeansclustering
  • tensorflowversion
  • installcudnn
  • installcuda
  • 사용자지정정규화공식
  • cuda9.0
  • rospy
  • installubuntu
  • graphicdriver
  • 백준2231
  • CUDA
  • cuda설치
  • 오츠알고리즘
  • pytorch
  • clustering
  • C++

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
오뚜깅
2. 스택
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.