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