Stack에 해당되는 글 1건
2004/11/22 :: c++ template을 이용한 Stack (5)
2004/11/22 15:29 :: Text/전공관련
/* 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> 임..
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> 임..

