스쳐가는비
devtravel
스쳐가는비
전체 방문자
오늘
어제
  • 분류 전체보기 (108)
    • 🎵 Daily (9)
    • 📚 Computer Science (9)
    • └ Algorithm (9)
    • └ Design Pattern (2)
    • 🔥 Programming (0)
    • └ Python (1)
    • └ OpenCV (9)
    • └ ML & DL (5)
    • └ C++ (5)
    • └ C# (3)
    • 🔥 Web (0)
    • └ JavaScript (7)
    • └ HTML (6)
    • 📌 Tool (0)
    • └ Etc (0)
    • └ Git (2)
    • 📖 Certificate (0)
    • └ ADsP (6)
    • └ 사무자동화산업기사 (0)
    • └ 정보처리기사 (0)
    • └ 리눅스 마스터 (0)
    • └ SQL 개발자 (2)
    • └ 컴활 1급 (2)
    • 💻 OnlineJudge (0)
    • └ GoormEdu (0)
    • └ Baekjoon (49)
GitHub Contribution
Loading data ...

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
스쳐가는비

devtravel

[Algorithm] C++ Stack (스택) 클래스 구현
└ Algorithm

[Algorithm] C++ Stack (스택) 클래스 구현

2022. 10. 13. 18:48

스택 (Stack)

  • 자료구조에서 무언가를 쌓는다는 의미로 쓰인다.
  • LIFO(Last In First Out) - 후입선출 이라고 불린다.
  • 삽입연산을 Push라고 하고, 삭제연산을 Pop이라 한다.
  • 보통 DFS (깊이 우선 탐색)에 쓰인다.

 

예시

  • 웹 브라우저  (뒤로 가기) : 가장 나중에 열린 페이지부터 다시 보여준다.
  • 실행 취소 (undo) : 가장 나중에 실행된 것부터 실행을 취소한다.
  • 수식의 괄호 검사 (연산자 우선순위 표현을 위한 괄호 검사)

 

 

Code

#include <iostream>
using namespace std;

class Stack
{
private:
	int _count;
	int _size;

	short* m_data;

public :

	// 생성자
	Stack()
	{
		_size = 0;
		_count = 0;
		m_data = NULL;
	}

	// 소멸자
	~Stack()
	{
		if (m_data == NULL)
			delete[] m_data;
	}

	void Create(short m_size)
	{
		// 크기 체크
		if (m_size > 0 && m_size != _size)
		{
			if (m_data != NULL)
				delete[] m_data;

			// 새크기 저장 및 메모리 할당
			_size = m_size;
			m_data = new short[_size];
		}
	}

	void Push(short m_num)
	{
		// 비어있을경우
		if (_count < _size)
		{
			*(m_data + _count) = m_num;
			_count++;
		}
		else
			cout << "Stack is full" << "\n";
	}

	int Pop(int* p_num)
	{
		// 스택에 저장된 개수가 없을경우
		if (_count == 0)
		{
			cout << "Stack is empty" << "\n";
			return 0;
		}

		_count--;
		*p_num = *(m_data + _count);
		return 1;
	}

	void Show()
	{
		if (_count == 0)
			cout << "Stack is empty" << "\n";

		else
		{
			cout << "Stack ob" << "\n";
			for (int i = 0; i < _count; i++)
			{
				cout << i + 1 << " : " << *(m_data + i) << "\n";
			}

			cout << "층 " << _count << "개의 값이 저장" << "\n";
		}
	}
};

int main()
{
	Stack stack;

	int select_index = 0;
	int size = 0;

	cout << "Stack의 크기를 입력하세요." << "\n";
	cin >> size;

	stack.Create(size);

	while (select_index != 9)
	{
		cout << "\n\n1. Stack에 값 넣기" << endl;
		cout << "2. Stack에서 값 꺼내기" << endl;
		cout << "3. Stack 저장된 값 확인" << endl;

		cout << "9. 종료" << endl;
		cin >> select_index;

		switch (select_index)
		{
		case 1:
			cout << "저장할 값 입력 : ";
			cin >> size;
			stack.Push(size);
			break;
		case 2:
			if (stack.Pop(&size))
				cout << "가져온 값 : " << size << endl;
			break;

		case 3:
			stack.Show();
			break;
		}
	}
}

 

'└ Algorithm' 카테고리의 다른 글

[Algorithm] C++ DFS & BFS 이해 및 구현  (0) 2022.12.13
[Algorithm] C++ Queue (큐) 클래스 구현  (0) 2022.10.14
[Algorithm] C++ Merge Sort (병합정렬)  (0) 2022.10.05
[Algorithm] C++ Quick Sort (퀵정렬)  (0) 2022.10.05
[Algorithm] C++ Insertion Sort (삽입정렬)  (0) 2022.10.04
    '└ Algorithm' 카테고리의 다른 글
    • [Algorithm] C++ DFS & BFS 이해 및 구현
    • [Algorithm] C++ Queue (큐) 클래스 구현
    • [Algorithm] C++ Merge Sort (병합정렬)
    • [Algorithm] C++ Quick Sort (퀵정렬)
    스쳐가는비
    스쳐가는비
    The biggest risk is not taking any risk

    티스토리툴바