새소식

💻 Programming (프로그래밍)/C++

[C++][구현] 스택 (Stack)

  • -

resize() : 사용할 수 있는 스택의 Capacity를 늘려주는 함수

push() : 스택에 저장 하는 기능

pop() : 스택에서 값이 빠져나오는 기능

top() : 스택의 맨 윗값을 출력하는 기능

capacity() : 스택의 용량을 출력하는 기능

size() : 스택의 크기를 출력하는 기능

empty() : 스택이 비었는지, 안 비었는지 유무를 출력하는 기능


#include <iostream>
using namespace std;

template<typename T> class mStack {
private:
	T* arr;
	unsigned int m_capacity;
	unsigned int m_size;

public:
	// 생성자
	mStack() {
		m_capacity = 3; // default capacity 10;
		m_size = 0;
		arr = new T[m_capacity];
	}

	// 소멸자
	~mStack() {
		if (arr != NULL) delete[] arr;
	}

	void resize() {
		m_capacity *= 2;
		T* tmp = new T[m_size];
		for (int i = 0; i < m_size; i++) tmp[i] = arr[i];

		arr = new T[m_capacity];
		for (int i = 0; i < m_size; i++) arr[i] = tmp[i];
		delete[] tmp;
		tmp = nullptr;
	}

	void push(T data) {
		if (m_size >= m_capacity) {
			resize();
		}

		arr[m_size++] = data;
	}

	T pop() {
		if (m_size)
			return arr[--m_size];
		else
			throw out_of_range("Stack is Empty");
	}

	T top() {
		if (m_size)
			return arr[m_size - 1];
		else
			throw out_of_range("Stack is Empty");
	}


	T capacity() {
		return m_capacity;
	}

	T size() {
		return m_size;
	}

	bool empty() {
		return m_size == 0 ? true : false;
	}
};

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.