【C++】定义CMyStack栈,实现栈的各种功能

246 阅读1分钟

【C++】定义CMyStack栈,实现栈的各种功能


定义栈CMyStack,该栈能保存指定个数的字符。其功能如下:
1)入栈;
2)出栈;
3)获得栈顶元素;
4)清空栈;
5)判断是否栈空;
6)判断是否栈满。
在实现过程中,自定义相关成员变量和成员函数。

#include <iostream>
#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);
	bool clearstack(T &iElement);
	bool gettop(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;
}
//清空栈
template <class T>
bool CMyStack<T>::clearstack(T &iElement)
{
	for(int i=0;i<m_iMaxCount;i++)
	{
		iElement=0;
		m_pData[i]=0;
	}
	printf("clear\n");
	return true;
}
//获得栈顶
template <class T>
bool CMyStack<T>::gettop(T &iElement)
{
	if(IsEmpty())
		return false;
	iElement=m_pData[--m_iCount];
	++m_iCount;
	printf("Top:%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;
	//获得栈顶
	st.gettop(a);
	for(i=0;i<5;i++)
	{
		st.Pop(a);
	}
	printf("======================\n"); 
	//清空栈 
	CMyStack<CA> s(5);
	for(i=0;i<5;i++)
	     s.Push(CA(i));
	CA a1;
	s.clearstack(a1);
	for(i=0;i<5;i++)
	{
		s.Pop(a1);
	}
	return 0;
} 

参考文章

通用的CMyStack类