用指针方式实现栈,相对于顺序栈,指针方式不用指定栈的大小,
先定义一个栈节点类,再定义一个链栈类,为使链栈类能访问栈节点的元素,设链栈类为栈节点类的友元类。
#include<iostream>
using namespace std;
class LinkStack;
class StackNode //设计每个节点的类型
{
char
*data;
StackNode *next;
friend class LinkStack; //设置友元类,以便LinkStack类访问其元素
};
class LinkStack
{
StackNode *top;
public:
LinkStack()
{
top=NULL;
}
int stackempty() //判断是否空栈
{
return top==NULL;
}
void push(char *e)//入栈
{
StackNode *q;
q=new
StackNode;
q->data=new char(sizeof(e)+1);
strcpy(q->data,e);
q->next=top;
//q的下一个节点指向顶栈
top=q;
//顶栈指针指向当前指针;西电用教材中c代码出错
}
void pop(char *&e)
{
StackNode *q=top;
if(stackempty())
{
cout<<"stack
underflow"<<endl;
return;
}
e=new char(sizeof(q->data)+1);
strcpy(e,q->data);
top=q->next;
delete
q;
}
void show() //栈的显示
{
StackNode *q=top;
while(q!=NULL)
{
cout<<q->data<<endl;
q=q->next;
}
}
};
void
main()
{
LinkStack a;
a.push("sb");
a.push("test");
a.push("stack");
char *e;
a.pop(e);
cout<<"pop is:
"<<e<<endl;
a.push("link");
a.show();
}
数据结构4_链栈