[자료구조] 스택 구현하기 - Stack

    template을 이용한 스택 구현


    스택 기능

    push       데이터 삽입

    peek       가장 최근에 삽입된 데이터에 접근

    pop         가장 최근에 삽입된 데이터 꺼내오기

    full           스택이 찼는지 확인

    empty    스택이 비었는지 확인

    size         스택 사이즈 반환


    스택 구현

     

    #include <iostream>
    using namespace std;
    
    template <typename T>
    class Stack
    {
    private:
    	T* stack_data;
    	int top_idx;
    	int max_size;
    
    public:
    	Stack(int stack_size)
    		: top_idx(-1)
    		, max_size(stack_size)
    	{
    		stack_data = new T[stack_size];
    	}
    
    	~Stack()
    	{
    		delete stack_data;
    	}
    
    	void push(const T& val)
    	{
    		if (full())
    			return;
    
    		top_idx++;
    		stack_data[top_idx] = val;
    	}
    
    	T pop()
    	{
    		if (empty())
    			return -1;
    
    		return stack_data[top_idx--];
    	}
    
    	T peek()
    	{
    		if (empty())
    			return -1;
    
    		return stack_data[top_idx];
    	}
    
    	int size()
    	{
    		return top_idx + 1;
    	}
        
    	bool full()
    	{
    		return top_idx == size - 1;
    	}
    
    	bool empty()
    	{
    		return top_idx == -1;
    	}
    };
    
    int main()
    {
    	int stack_size = 5;
    	Stack<int> stack(stack_size);
    	
    	for (int i = 1; i <= stack_size; ++i)
    	{
    		stack.push(i);
    	}
    
    	while (stack.empty() == false)
    	{
    		cout << stack.pop() << endl;
    	}
    
    	return 0;
    }

    댓글