我的CMD工程(2) 参数栈的定义 请指点

//COMMAND SYSTEM

//File Name:ParmStack.h

//Info        :Define Parm Stack

//Author    : CRZ

///参数栈的定义 (参照《C++与数据结构》中链栈的定义)///

#  ifndef  ParmStack_h
#  define  ParmStack_h
#  include <assert.h>

template <class type>

class abstack
{
 public:
  bool IsEmpty()
  {return (height == 0)? true:false;}
  virtual void Push(type&) = 0;
  virtual bool Pop(type&) = 0;
  virtual void Clear() = 0;
 protected:
  unsigned height;
};

template <class type>
struct StackNode
{
 type data;
 StackNode *next;
};

template <class type>
class LinkStack:public abstack<type>
{
 public:
  LinkStack();
  LinkStack(LinkStack &g)
  {
   top = NULL;
   Copy(g);
  }
  ~LinkStack()
  {Clear();}
  void Clear();
  void Push(type &x);
  bool Pop(type &x);
  LinkStack & operator = (LinkStack &g)
  {
   Copy(g);
   return *this;
  }
 protected:
  StackNode<type> *top;
  LinkStack &Copy(LinkStack &s);
};

template <class type>
LinkStack<type>::LinkStack()
{
 height = 0;
 top = NULL;
}

template <class type>
LinkStack<type> &LinkStack<type>::Copy(LinkStack<type> &g)
{
 StackNode<type>*p,*q,*r;
 if(top) Clear();
 height = g.height;
 top = NULL;
 if(!g.top)
  return *this;
 top = new StackNode<type>;
 assert(top);
 top->next=NULL;
 top->data = g.top->data;
 q = q.top->next;
 p = top;
 while(q)
 {
  r = new StackNode<type>;
  assert(r);
  r->data = q->data;
  r->next NULL;
  p->next = r;
  p = p->next;
  q = q->next;
 }
 return *this;
}

template <class type>
void LinkStack<type>::Clear()
{
 type x;
 while(Pop(x));
}

template <class type>
void LinkStack<type>::Push(type &x)
{
 StackNode<type> *p;
 if(top)
 {
  p = new StackNode<type>;
  assert(p);
  p->data = x;
  p->next = top;
  top = p;
 }
 else
 {
  top = new StackNode<type>;
  assert(top);
  top->data = x;
  top->next = NULL;
 }
 height++;
}

template <class type>
bool LinkStack<type>::Pop(type &x)
{
 StackNode<type> *p;
 if(height)
 {
  x = top->data;
  p = top;
  top = top->next;
  delete p;
  height--;
  return true;
 }
 return false;
}

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值