读书人

栈的链接储存结构-链栈 图解和代码实现

发布时间: 2013-03-14 10:33:15 作者: rapoo

栈的链接存储结构--链栈 图解和代码实现

栈的链接存储结构--链栈

链栈的图片:

栈的链接储存结构-链栈 图解和代码实现

LinkStack.h

//LinkStack.h#ifndef LINKSTACK_H#define LINKSTACK_Htemplate <class T>struct Node{    T data;    Node<T> *next;  //此处<T>也可以省略};template <class T>class LinkStack{public:    LinkStack( );              //构造函数,置空链栈    ~LinkStack( );             //析构函数,释放链栈中各结点的存储空间    void Push(T x);           //将元素x入栈    T Pop( );                  //将栈顶元素出栈    T GetTop( );               //取栈顶元素(并不删除)    bool Empty( );             //判断链栈是否为空栈private:    Node<T> *top;             //栈顶指针即链栈的头指针};#endif

LinkStack.cpp

//LinkStack.cpp#include "LinkStack.h"/* * 前置条件:栈不存在 * 输    入:无 * 功    能:栈的初始化 * 输    出:无 * 后置条件:构造一个空栈 */template <class T>LinkStack<T>::LinkStack( ){top=NULL; }/* * 前置条件:栈已存在 * 输    入:无 * 功    能:销毁栈 * 输    出:无 * 后置条件:释放栈所占用的存储空间 */template <class T>LinkStack<T>::~LinkStack( ){while (top){Node<T> *p;p=top->next;        delete top;        top=p;}}/* * 前置条件:栈已存在 * 输    入:节点s * 功    能:在栈顶插入该节点 * 输    出:无 * 后置条件:如果插入成功,栈顶增加了一个元素 */template<class T> void LinkStack<T>::Push(T x){    Node<T> *s;s=new Node<T>;        s->data = x;     //申请一个数据域为x的结点s    s->next = top; top=s;           //将结点s插在栈顶}/* * 前置条件:栈已存在 * 输    入:无 * 功    能:删除栈顶元素 * 输    出:如果删除成功,返回被删元素值,否则,抛出异常 * 后置条件:如果删除成功,栈顶减少了一个元素 */    template <class T> T LinkStack<T>::Pop( ){       Node<T> *p;int x;     if (top==NULL) throw "下溢";    x=top->data;            //暂存栈顶元素    p=top; top=top->next;         //将栈顶结点摘链    delete p;    return x;}/* * 前置条件:栈已存在 * 输    入:无 * 功    能:读取当前的栈顶元素 * 输    出:若栈不空,返回当前的栈顶元素值 * 后置条件:栈不变 */template <class T> T LinkStack<T>::GetTop( ){    if (top!=NULL) return top->data;}/* * 前置条件:栈已存在 * 输    入:无 * 功    能:判断栈是否为空 * 输    出:如果栈为空,返回1,否则,返回0 * 后置条件:栈不变 */template <class T> bool LinkStack<T>::Empty( ){    if(top==NULL) return 1;else return 0;}

读书人网 >软件开发

热点推荐