#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
template <class T>
class CMyStack
{
private:
T *m_pData;
int m_iMaxCount;//容量
int m_iCount;//元素个数
public:
CMyStack(int iMaxCount);
~CMyStack();
bool IsEmpty();
bool IsFull();
bool Push(const T &iElement);
bool Pop(T &iElement);
};
template <class T>
CMyStack<T>::CMyStack(int iMaxCount)
{
m_pData = new T[iMaxCount];
m_iMaxCount = iMaxCount;
m_iCount = 0;
}
template <class T>
CMyStack<T>::~CMyStack()
{
delete []m_pData;
}
template <class T>
bool CMyStack<T>::IsEmpty()
{
return m_iCount == 0;
}
template <class T>
bool CMyStack<T>::IsFull()
{
return m_iCount == m_iMaxCount;
}
template <class T>
bool CMyStack<T>::Push(const T &iElement)
{
if(IsFull())
return false;
m_pData[m_iCount++]=iElement;
printf("Push:%d\n",iElement);
return true;
}
template <class T>
bool CMyStack<T>::Pop(T &iElement)
{
if(IsEmpty())
return false;
iElement=m_pData[--m_iCount];
printf("Pop:%d\n",iElement);
return true;
}
class CA
{
public:
int m_ia;
CA(int ia=0){m_ia = ia;}
};
int main()
{
int i;
CMyStack<int> stack(8);//用CMyStack<int>
while(stack.Push(rand()));
printf("\nIsEmpty? %d, IsFull? %d\n\n",
stack.IsEmpty(),stack.IsFull());
while(stack.Pop(i));
printf("\nIsEmpty? %d, IsFull? %d\n",
stack.IsEmpty(),stack.IsFull());
//CMyStack<CA>测试
printf("======================\n");
CMyStack<CA> st(5);
for(i=0;i<5;i++)
st.Push(CA(i));
CA a;
for(i=0;i<5;i++)
{
st.Pop(a);
}
return 0;