⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.h

📁 类的继承和派生,觉得很有用,放上来一起分享
💻 H
字号:
template<class T>
struct STACK_NODE                      //定义栈中的各结点类型
{
   T Data;
   STACK_NODE *pNext;
};

template <class T>
class CStack
{
   protected:
          int  m_iSize;                //定义栈长度
		  STACK_NODE <T> *m_pTOP;      //定义栈顶指针
   public:
          CStack();               
		  ~CStack();
		  bool Push(T & x);           //入栈
		  bool Pop(T & x);            //出栈
		  bool IsEmpty();              //判栈空
		  void ClearStack();
		  CStack & operator<< (CStack);     //重载赋值运算符
};


template <class T>
CStack <T>::CStack()                   //定义构造函数
{
   m_iSize=0;
   m_pTOP=NULL;
}

template <class T>
CStack <T>::~CStack()                  
{
   ClearStack();
}

template <class T>
bool CStack <T>::IsEmpty()             
{
    return (m_iSize==0)?true:false;
}

template <class T>
bool CStack <T>::Push(T & x)       //结点入栈
{
  STACK_NODE<T> *p;
  p=new STACK_NODE<T>;          //为p结点分配存储空间
  if(!p)
     return false;                //若分配失败,则返回
  p->Data=x;
  p->pNext=m_pTOP;
  m_pTOP=p;
  m_iSize++;                       //长度加1
  return true;
}

template <class T>
bool CStack <T>::Pop(T & x)        //结点出栈
{
   STACK_NODE<T> *p;
   if(m_pTOP)                      //若栈非空
     {
	     x=m_pTOP->Data;
		 p=m_pTOP;
		 m_pTOP=m_pTOP->pNext;     //修改栈顶指针
		 delete p;                 //删除结点
		 m_iSize--;                //长度减1
		 return  true;
	 }
	return false;
}


template <class T>
void CStack <T>::ClearStack()     //将栈清空
{
  T  p;
  while(Pop(p));
}


class Staff           //循环出栈,实现清除
{
  public:
       char m_strName[32];
	   int m_iAge;
	   float m_fSalary;
	   char m_strSex[4];
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -