当前位置: 首页 > 图文教程 > 开发语言 > C/C++ > 一个栈类的实现(链栈)

C/C++
VC++ SMTP协议电子邮件传送剖析
Managed C++设计新邮件检查器
解决两个难懂的安全性问题
高级扫描技术及原理介绍
VC的另类数据库编程
Visual C++6.0 API函数操作技巧集
托盘编程全接触
在Visual C++中使用内联汇编
理解 Visual C++ Extensions for ADO
TCP/IP Winsock编程要点
VC打造自己特色的屏幕保护
Windows Sockets API实现网络异步通讯
程序界面多模式显示的实现
VC++6.0中控制运行唯一实例
WDM驱动程序设计之编译安装篇
VC编程中如何操作数据库中的图像字段
Windows 9X硬件中断设备驱动程序的开发
用控件聚合技术为FlexGrid增添PickList功能
用ATL和MFC来创建ActiveX控件
用VC进行COM编程所必须掌握的理论知识

C/C++ 中的 一个栈类的实现(链栈)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 166 ::
收藏到网摘: n/a

typedef struct LNode
{
 int data;
 struct LNode *next;
}LNode, *pLinkList;

//类的声明

class LinkList
{
 private:
        pLinkList m_pList;
        int m_listLength;
public:
        LinkList();
        ~LinkList();
        bool InitList ();
        bool DestroyList ();
        bool ClearList();
        bool IsEmpty ();
        int GetLength ();
        bool GetNode(int position, LNode** node);
        int LocateElem(int elem);
        bool SetNodeData(int position, int newData);
        bool GetNodeData(int position, int &data);
        bool InsertNode(int beforeWhich, int data);
        bool DeleteNode(int position);
};

//类的实现

 

Stack::Stack():top(NULL)
{
//
}
Stack::Stack(const Stack& a_stack)
{
 if (a_stack.top == NULL)
 {
  top =NULL;
 }
 else
 {
  StackNodePtr temp = a_stack.top;
  StackNodePtr end;
  end= new StackNode;
  end->data = temp->data;
  top =end;
  //第一各节点已经创建,而且填充了数据
  //现在,新的节点要在这个节点之后添加
  temp=temp->link;
  while(temp!=NULL)
  {
   end->link = new StackNode;
   end=end->link;
   end->data =temp->data;
   temp =temp->link;
  }
  end->link =NULL;

 }
}

Stack::~Stack()
{
  char next;
  while (top!=NULL)
    next =pop();
}

BOOL Stack::isempty() const
{
 return (top==NULL);
}

void Stack::push(char the_symbol)
{
 StackNodePtr temNode = new StackNode;
  temNode->data = the_symbol;
  temNode->link = top;
  top= temNode;
}
char Stack::pop()
{

 if (top==NULL)
  return 0;

  char pResult = top->data;
  StackNodePtr temNodePtr = top;
  top=top->link;//top指针向下移动一位
  delete temNodePtr; //释放那个节点的空间
 
}