天天看点

数据结构4_链栈

用指针方式实现栈,相对于顺序栈,指针方式不用指定栈的大小,

先定义一个栈节点类,再定义一个链栈类,为使链栈类能访问栈节点的元素,设链栈类为栈节点类的友元类。

<code>#<b>include</b>&lt;iostream&gt; <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-&gt;data=<b>new</b> <b>char</b>(<b>sizeof</b>(e)+1);         strcpy(q-&gt;data,e);         q-&gt;next=top;   //q的下一个节点指向顶栈         top=q;         //顶栈指针指向当前指针;西电用教材中c代码出错     }     <b>void</b> pop(<b>char</b> *&amp;e)     {         StackNode *q=top;         <b>if</b>(stackempty())         {             cout&lt;&lt;"stack underflow"&lt;&lt;endl;             <b>return</b>;         }         e=<b>new</b> <b>char</b>(<b>sizeof</b>(q-&gt;data)+1);         strcpy(e,q-&gt;data);         top=q-&gt;next;         <b>delete</b> q;     }     <b>void</b> show()    //栈的显示     {         StackNode *q=top;         <b>while</b>(q!=NULL)         {             cout&lt;&lt;q-&gt;data&lt;&lt;endl;             q=q-&gt;next;         }     } }; <b>void</b> main() {     LinkStack a;     a.push("sb");     a.push("test");     a.push("stack");     <b>char</b> *e;     a.pop(e);     cout&lt;&lt;"pop is:  "&lt;&lt;e&lt;&lt;endl;     a.push("link");     a.show(); }</code>