본문 바로가기
자료구조

[C++/자료구조] 스택(Linked List)

by MY블로그 2023. 7. 8.

Stack : 스택

- 특징

1) 후입선출(LIFO) 구조를 가지는 자료구조
2) 삽입은 Push, 삭제는 Pop 연산을 사용

- 장점

1) 구현이 간단하다
2) 함수 호출의 역추적, 수식 계산, 문자열 역순 등에서 유용하다

- 단점

1) 중간 원소에 접근하기 어렵다

 

스택(Stack)은 나중에 입력된 값이 먼저 빠져나가는 후입선출 (Last In First Out / LIFO) 구조 이다.

Stack.h
#pragma once

void DoStack();

class Stack
{
public:
	Stack();
	
	bool IsEmpty();
	bool IsFull();

	void Push(DataType data);

	DataType Pop();
	DataType Peek();

private:
	int Top;
	DataType Data[MAX_SIZE];
};
Stack.cpp
#include "../../stdafx.h"
#include "Stack.h"

void DoStack()
{
	Stack s;
	s.Push(1);
	s.Push(2);
	s.Push(3);

	cout << s.Pop() << endl;	// 3
	cout << s.Peek() << endl;	// 2
	cout << s.Pop() << endl;	// 2
	cout << s.Pop() << endl;	// 1
	cout << s.Pop() << endl;	// -1

	Pause;
	return;
}

Stack::Stack()
{
	Top = -1;
}

bool Stack::IsEmpty()
{
	return Top == -1;
}

bool Stack::IsFull()
{
	return Top == MAX_SIZE - 1;
}

void Stack::Push(DataType data)
{
	if (IsFull())
	{
		cout << "Stack Overflow" << endl;
		return;
	}

	Data[++Top] = data;
	return;
}

DataType Stack::Pop()
{
	if (IsEmpty())
	{
		cout << "Stack Underflow" << endl;
		return -1;
	}

	return Data[Top--];
}

DataType Stack::Peek()
{
	if (IsEmpty())
	{
		cout << "Stack Underflow" << endl;
		return -1;
	}

	return Data[Top];
}

댓글