[코딩] 스택 구현하기

2015. 6. 10. 12:51엘키스공간/엘키스코딩공방

728x90
728x90
서론
예전에 대학 다닐때 템플릿이라 하면 완전 치를 떨었는데..
이제는 그냥 척척!
보통은 pop은 값을 가져오지 않고 반환형이 void로 스택 포인터를 감소하는 역할만 한다고 한다..
그래서 pick이나 top으로 값을 가져오는 함수를 따로 만든다.

일단 나는.. pop하면서 바로 꺼내버리는 구조이다.
배열로 간단히 구현해봤다.


2016/1/1

top으로 최상위 스택의 값을 가져오는 것을 구현했다.

stack의 활용도를 높일려면 pop과 top 정책이 있는 것이 확실히 활용도가 좋을 것으로 생각된다.

https://github.com/ElementalKiss/Cpp/blob/master/Source/MH_Stack/MH_Stack.h


구현 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
작성자 : 조민혁
작성일: 2015.06.04
작성내용
: 스택 만들기
*/
 
#pragma once
#include <iostream>
#define STACKMIN -1
 
// 스택
template <typename T>
class MH_Stack
{
private:
    // 탁 스택
    int m_topStack;
    // 스택별 한계치
    int m_maxStack;
    // 스택 포인터
    T* m_stackPointer;
 
public:
    // 생성자
    MH_Stack(int count);
    // 소멸자
    ~MH_Stack(void);
 
    // 푸쉬
    void Push(const T& pushValue);
    // 팝
    T* Pop(void);
    // 사이즈 얻기
    inline int StackSize(void) { return m_topStack; } 
    // 스택 클리어
    void StackClear(void);
};
 
// 생성자
template <typename T>
MH_Stack<T>::MH_Stack(int stackSize)
{
    // 탑 스택이 -1이면 비어있는 상태
    m_topStack = STACKMIN;
    // 스택 최대 값을 저장한다
    m_maxStack = stackSize;
    // 스택 포인터 초기화
    m_stackPointer = new T[stackSize];
}
 
// 소멸자
template <typename T>
MH_Stack<T>::~MH_Stack(void)
{
    // 스택 삭제
    delete [] m_stackPointer;
}
 
// 푸쉬
template <typename T>
void MH_Stack<T>::Push(const T& tValue)
{
    // 스택이 가득찼다면 포인터를 탑 스택을 증가시키지 않는다.
    if (m_topStack  == m_maxStack - 1)
    {
        cout<<"Stack is Full"<<endl;
        return;
    }
 
    // 스택 포인터 증가시키고 값 넣기
    m_topStack++;
    m_stackPointer[m_topStack] = tValue;
}
 
// 팝
template <typename T>
T* MH_Stack<T>::Pop(void)
{
    // 스택에서 뺄것이 없다면 -1(에러)리턴
    if (m_topStack == STACKMIN)
    {
        cout<<"Stack is Empty"<<endl;
        return NULL;
    }
 
    // 리턴하고 스택포인터 감소
    return &m_stackPointer[m_topStack--];
}
 
// 스택 클리어
template <typename T>
void MH_Stack<T>::StackClear(void)
{
    // 파워 팝
    while (this->m_topStack != STACKMIN) { this->Pop(); }
    cout<<"Stack Clear."<<endl;
    return ;
}
cs





728x90
반응형

'엘키스공간 > 엘키스코딩공방' 카테고리의 다른 글

싱글 링크드 리스트  (0) 2015.06.21
큐로 메시지 큐 구현하기  (0) 2015.06.10
큐 구현하기  (0) 2015.06.10
가위바위보 게임 만들기  (0) 2015.03.24
베스킨라빈스 31 게임  (0) 2015.03.24
발전하는 성적표 관리 시스템  (0) 2015.03.24
반복문  (0) 2015.03.23