天天看点

堆栈

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&lt;stdio.h&gt;</code>

<code>#include&lt;stdlib.h&gt;</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-&gt;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-&gt;Data = 0;</code>

<code>    </code><code>Temp-&gt;Next = NULL;</code>

<code>/*显示栈所以数据*/</code>

<code>void</code> <code>DisplayStack(Pstack L)</code>

<code>    </code><code>Pstack Temp = L-&gt;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-&gt;Data);</code>

<code>        </code><code>Temp = Temp-&gt;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-&gt;Data = X;</code>

<code>    </code><code>Temp-&gt;Next = L-&gt;Next;</code>

<code>    </code><code>L-&gt;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-&gt;Next-&gt;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-&gt;Next = Temp-&gt;Next;</code>

<code>    </code><code>free</code><code>(Temp);</code>

<code></code>

本文转自 8yi少女的夢 51CTO博客,原文链接:http://blog.51cto.com/zhaoxiaohu/1963117,如需转载请自行联系原作者

继续阅读