一 固定大小的栈
代码如下
//
// stack.h
// stack
//
#ifndef __stack__stack__
#define __stack__stack__
#include <stdio.h>
template <class Type>
class Stack
{
private:
enum {MAX = 10};
Type items[MAX];
int top;
public:
Stack();
bool isempty();
bool isfull();
bool push(const Type & item);
bool pop(Type &item);
};
template <class Type>
Stack<Type> ::Stack()
{
top = 0;
}
template <class Type>
bool Stack<Type>::isempty()
{
return top == 0;
}
template <class Type>
bool Stack<Type>::isfull()
{
return top == MAX;
}
template <class Type>
bool Stack<Type>::push(const Type & item)
{
if (top < MAX)
{
items[top++] = item;
return true;
}
else
return false;
}
template <class Type>
bool Stack<Type>::pop(Type & item)
{
if (top > 0)
{
item = items[--top];
return true;
}
else
return false;
}
#endif /* defined(__stack__stack__) */
二 大小可变的栈
代码如下
#ifndef __stack__stcktp1__
#define __stack__stcktp1__
#include <stdio.h>
template <class Type>
class Stack {
private:
enum {SIZE = 10};
int stacksize;
Type * items;
int top;
public:
explicit Stack(int ss = SIZE);
Stack(const Stack & st);
~Stack() {delete [] items;}
bool isempty() {return top == 0;}
bool isfull() {return top == stacksize;}
bool push(const Type & item);
bool pop(Type & item);
Stack & operator=(const Stack & st);
};
template <class Type>
Stack<Type> ::Stack(int ss):stacksize(ss),top(0)
{
items = new Type[stacksize];
}
template <class Type>
Stack<Type> ::Stack(const Stack & st)
{
stacksize = st.stacksize;
top = st.top;
items = new Type[stacksize];
for (int i = 0; i < top; i++)
{
items[i] = st.items[i];
}
}
template <class Type>
bool Stack<Type>::push(const Type & item)
{
if (top < stacksize)
{
items[top++] = item;
return true;
}
else
return false;
}
template <class Type>
bool Stack<Type>::pop(Type &item)
{
if (top > 0)
{
item = items[--top];
return true;
}
else
return false;
}
template<class Type>
Stack<Type> & Stack<Type>::operator=(const Stack<Type> &st)
{
if (this == &st)
{
return *this;
}
delete []items;
stacksize = st.stacksize;
top = st.top;
items = new Type[stacksize];
for(int i = 0;i < top;i++)
{
items[i] = st.items[i];
}
return *this;
}
#endif /* defined(__stack__stcktp1__) */