잊지 않겠습니다.
Blog | Tag | Local | Media | Guest | Login | RSS
Stack에 해당되는 글 1건
/* Stack.h */
template <class T>
class Stack{

private:
   int topindex;
   int capacity;
   T *elements;

public:
   static const int DEF_STACK_CAPACITY;
   Stack(int stackCapacity = 10);
   ~Stack();
   bool push(const T& item);
   bool pop();
   bool top(T &item) const;
   bool isEmpty() const;
   bool isFull() const;
   int size() const;
};

template <class T>
const int Stack<T>::DEF_STACK_CAPACITY = 10;

template <class T>
Stack<T>::Stack(int stackCapacity) {
   topindex = -1;
   capacity = (stackCapacity>0) ? stackCapacity : DEF_STACK_CAPACITY;
   elements = new T[capacity];
}

template <class T>
Stack<T>::~Stack() {
   delete [] elements;
}

template <class T>
bool Stack<T>::push(const T& item) {
   if (isFull()) return false;
   else {
       ++topindex;
       elements[topindex] = item;
       return true;
   }
}

template <class T>
bool Stack<T>::pop() {
   if (isEmpty()) return false;
   else {
       --topindex;
       return true;
   }
}

template <class T>
bool Stack<T>::top(T& item) const {
   if (isEmpty()) return false;
   else {
       item = elements[topindex];
       return true;
   }
}

template <class T>
bool Stack<T>::isFull() const {
   return (size() == capacity);
}

template <class T>
bool Stack<T>::isEmpty() const {
   return (size() == 0);
}

template <class T>
int Stack<T>::size() const {
   return topindex+1;
}

/* StackTest.cpp */
#include <iostream>
#include "Stack.h"

using std::cout;
using std::endl;

int main()
{
   Stack<double> testStack(5);

   testStack.push(1.1);
   testStack.push(4.1);
   testStack.push(1.5);
   testStack.push(2.1);

   double item;

   for (int i = 0; i < 4; i++) {
       if(testStack.top(item)) {
           cout << item << endl;
           testStack.pop();
       }
   }

   return 0;
}

덧 ::
헤더파일안에 같이 선언함..
클래스 이름이 Stack이 아니고, Stack<class T> 임..

 태그 :