1.栈的理解
栈的模型就不画了因为非常简单,想想***的弹夹如何装子弹,栈就是如此。栈是先进后出,或后进先出。栈是限制插入和删除只能在一个位置上进行的表,该位置就是末端,叫栈顶。基本操作Push(进栈)和Pop(出栈)。
2.栈的链表实现:默认函数输入的指针不为空
<code>stack.h</code>
<code>#ifndef _STACK_</code>
<code>#define _STACK_</code>
<code>typedef</code> <code>struct</code> <code>Node{</code>
<code> </code><code>int</code> <code>Data;</code>
<code> </code><code>struct</code> <code>Node *Next;</code>
<code>}*Pstack,Stack;</code>
<code>int</code> <code>IsEmpty(Pstack L);</code>
<code>Pstack CreateStack(</code><code>void</code><code>);</code>
<code>void</code> <code>DisplayStack(Pstack L);</code>
<code>void</code> <code>Push(</code><code>int</code> <code>X,Pstack L);</code>
<code>int</code> <code>Top(Pstack L);</code>
<code>void</code> <code>Pop(Pstack L);</code>
<code>#endif</code>
<code>stack.c</code>
<code>#include<stdio.h></code>
<code>#include<stdlib.h></code>
<code>#include"stack.h"</code>
<code>/*判断栈是否为空*/</code>
<code>int</code> <code>IsEmpty(Pstack L)</code>
<code>{</code>
<code> </code><code>if</code><code>(NULL == L->Next)</code>
<code> </code><code>{</code>
<code> </code><code>return</code> <code>0;</code>
<code> </code><code>} </code>
<code> </code><code>return</code> <code>-1;</code>
<code>}</code>
<code>/*申请一个栈节点*/</code>
<code>static</code> <code>Pstack MallocNode(</code><code>void</code><code>)</code>
<code> </code><code>Pstack Temp = (Pstack)</code><code>malloc</code><code>(</code><code>sizeof</code><code>(Stack));</code>
<code> </code><code>if</code><code>(NULL == Temp)</code>
<code> </code><code>printf</code><code>(</code><code>"malloc error\n"</code><code>);</code>
<code> </code><code>return</code> <code>NULL;</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>Temp;</code>
<code>/*创建栈*/</code>
<code>Pstack CreateStack(</code><code>void</code><code>)</code>
<code> </code><code>Pstack Temp = MallocNode();</code>
<code> </code><code>if</code><code>(NULL == Temp)</code>
<code> </code><code>printf</code><code>(</code><code>"CreateStack malloc error\n"</code><code>);</code>
<code> </code><code>Temp->Data = 0;</code>
<code> </code><code>Temp->Next = NULL;</code>
<code>/*显示栈所以数据*/</code>
<code>void</code> <code>DisplayStack(Pstack L)</code>
<code> </code><code>Pstack Temp = L->Next;</code>
<code> </code><code>if</code><code>(0 == IsEmpty(L))</code>
<code> </code><code>printf</code><code>(</code><code>"DisplayStack NULL Stack\n"</code><code>);</code>
<code> </code><code>return</code> <code>;</code>
<code> </code><code>while</code><code>(NULL != Temp)</code>
<code> </code><code>printf</code><code>(</code><code>"Stack = %d "</code><code>,Temp->Data);</code>
<code> </code><code>Temp = Temp->Next;</code>
<code> </code><code>printf</code><code>(</code><code>"\n"</code><code>);</code>
<code>/*压栈,向栈中放数据*/</code>
<code>void</code> <code>Push(</code><code>int</code> <code>X,Pstack L)</code>
<code> </code><code>Pstack Temp = MallocNode();</code>
<code> </code><code>printf</code><code>(</code><code>"Push MallocNode error\n"</code><code>);</code>
<code> </code><code>return</code><code>;</code>
<code> </code><code>Temp->Data = X;</code>
<code> </code><code>Temp->Next = L->Next;</code>
<code> </code><code>L->Next = Temp;</code>
<code>/*求栈顶元素*/</code>
<code>int</code> <code>Top(Pstack L)</code>
<code> </code><code>if</code><code>(0 != IsEmpty(L))</code>
<code> </code><code>return</code> <code>L->Next->Data;</code>
<code> </code><code>printf</code><code>(</code><code>"IsEmpty\n"</code><code>);</code>
<code>/*弹出栈,删除栈节点*/</code>
<code>void</code> <code>Pop(Pstack L)</code>
<code> </code><code>printf</code><code>(</code><code>"Pop:IsEmpty\n"</code><code>);</code>
<code> </code><code>L->Next = Temp->Next;</code>
<code> </code><code>free</code><code>(Temp);</code>
<code></code>
本文转自 8yi少女的夢 51CTO博客,原文链接:http://blog.51cto.com/zhaoxiaohu/1963117,如需转载请自行联系原作者