[자료구조] Stack and Queue
오늘은 어떤 코드일까 궁금하담 ^^ 항상 상상을 초월하는 교수님의 코드 ㅎㅎㅎㅎㅎ 오늘도 화이팅><
✨𝐒𝐓𝐀𝐂𝐊✨
스택이란 한쪽이 막힌(homogeneous) 통에 쌓아올린 것 : 프링글스, 초코통, 동전 쌓기 등등..
💡 스택(Stack)의 이해
📌 스택이란?
스택은 ‘먼저 들어간 것이 나중에 나오는 자료구조’이다.
- ‘LIFO(Last-in, First-out) 구조'이다.
후입선출 방식- 프링글스로 이해하면 쉽다.
∙ 프링글스 통에 감자칩을 넣는다. push
∙ 프링글스 통에서 감자칩을 꺼낸다. pop
∙ 이번에 꺼낼 감자칩이 무엇인지 통 안을 들여다 본다. top
💡 스택(Stack) ADT 정의
앞에서 리스트 자료구조의 ADT는 필요에 따라서 정렬 기능이라던지 그 정의 내용에 약간씩 차이가 있지만, 그에 비해 스택의 ADT는 상대적으로 정형화된 편이다. 프링글스 통을 가지고 감자칩을 넣고, 꺼내고, 들여다 보는 연산 등이 주를 이룰 것이다❕ 따라서 스택 자료구조의 ADT를 정의하면 다음과 같다.
📌 스택 ADT 정의
void MakeEmpty();
스택을 비어있는 상태로 설정함.bool IsEmpty() const;
스택이 비어있는 경우, TRUE(1)을, 그렇지 않은 경우 FALSE(0)을 반환함.bool IsFull() const;
스택이 가득찬 경우, TRUE(1)을, 그렇지 않은 경우 FALSE(0)을 반환함.void Push(ItemType item);
스택에 데이터를 저장한다. 매개변수 item로 전달된 값을 저장함.void Pop();
∙ 마지막에 저장된 요소를 삭제한다.
∙ 본 함수의 호출을 위해서는 데이터가 하나 이상 존재해야한다.ItemType Top();
∙ 마지막에 저장된 요소를 반환하되 삭제하지 않는다.
∙ 본 함수의 호출을 위해서는 데이터가 하나 이상 존재해야한다.
스택은 배열로 구현하기 때문에 배열
멤버가 하나 필요하고, 요소의 위치에 대한 pointer
역할로 top
멤버 변수를 하나 둔다.
💡 스택의 배열 기반 구현
<StackType.h> 헤더파일 선언
#pragma once
#include "itemtype.h"
template<class ItemType> //formal parameter
class FullStack
{};
class EmptyStack
{};
class StackType
{
public:
StackType();
// Class constructor.
bool IsFull() const;
bool IsEmpty() const;
void Push(ItemType item);
void Pop();
ItemType Top();
private:
int top;
ItemType items[MAX_ITEM];
};
<StackType.cpp> 구현
이번 구현에서는throw
를 사용해 예외 클래스를 생성한다.
Pop()
이나Top()
을 쓰기 전에IsEmpty()
가 true이면EmptyStack()
클래스에 던져버린다.Push()
를 쓰기 전에IsFull()
이 true이면FullStack()
클래스에 던져버린다.
#include <iostream>
#include "StackType.h"
StackType::StackType()
{
top = -1;
//비어있는 경우 top = -1
}
bool StackType::IsEmpty() const
{
return(top == -1);
}
bool StackType::IsFull() const
{
return (top == MAX_ITEM - 1);
}
void StackType::Push(ItemType newItem)
{
if (IsFull())
throw FullStack();
//예외 클래스의 '익명 객체'를 생성한 후 이를 던진다.
top++;
items[top] = newItem;
}
void StackType::Pop()
{
if (IsEmpty())
throw EmptyStack();
top--;
}
ItemType StackType::Top()
{
if (IsEmpty())
throw EmptyStack();
return items[top];
}
재미있는 코드인 것 같담 ^_^..
하지만 스택에 다양한 자료형을 넣고 싶은데, 매번 바꿔줘야하는 번거로움이 있기 때문에 template
를 활용해 다시 구현해보겠다.
Class Template
template <class T> //formal parameter
class Myclass{
T xx;
};
와 같은 형식으로 사용한다.
코드를 actual parameter로 사용은 Myclass<float> g;
와 같이 사용한다.
Author And Source
이 문제에 관하여([자료구조] Stack and Queue), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mmindoong/자료구조-Stack-and-Queue저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)