通用的CMyStack类

#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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值