栈的链接存储结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

栈的链接存储结构

#include

using namespace std;

//单链表的结点结构体:

template

struct Node

{ DataType data;

Node *next;

};

//带头结点的单链表类的声明

template

class LinkStack

{ public:

LinkStack( ){ top=NULL; } //构造函数

~LinkStack( ); //析构函数

bool IsEmpty( ); //栈空操作

DataType GetTop ( ); //得到栈顶值操作

void Push( DataType x ); //进栈操作

DataType Pop( ); //出栈操作

private:

Node *top;

};

//析构函数,析构函数将单链表中所有结点的存储空间释放。

template

LinkStack :: ~LinkStack( )

{ Node *q;

while (top != NULL)

{ q = top; //暂存释放结点

top = top->next; //top指向被释放结点的下一个结点

delete q; //释放结点

}

cout<<"链表已经删除。"<

}

template

bool LinkStack::IsEmpty() //栈空返回true,否则返回false { return (top==NULL)?true:false; };

//进栈操作

template

void LinkStack:: Push( DataType x )

{ Node *s;

s=new Node; //申请一个数据成为x的结点s

s->data=x; s->next=top; top=s;

};

//出栈操作

template

DataType LinkStack::Pop( )

{ Node *p; DataType x;

if (IsEmpty()){ cout<<"栈空无值弹出"<data; p=top; top=top->next;

delete p; return x;

};

//返回栈顶值操作

template

DataType LinkStack::GetTop( )

{ if (IsEmpty()){ cout<< "栈空无值" <data;

};

void main()

{ LinkStack s;

cout << "栈是否空: " << s.IsEmpty() << endl;

//进栈操作

cout << "输入栈值,输入-1结束:";

int x; cin>>x;

while(x != -1) { s.Push(x); cin>>x; }

//取值操作

cout <<"取值操作:"<

//出栈操作

cout << "出栈顺序是: ";

x=1;

while(x!=-1){ x=s.Pop(); cout <

cout << endl ;

}

相关文档
最新文档