天天看點

基于線性表的堆棧

<code>#ifndef IOSTREAM</code>

<code>#include &lt;iostream&gt;</code>

<code>#endif</code>

<code>template</code><code>&lt;</code><code>class</code> <code>T&gt;</code>

<code>class</code> <code>Stack</code>

<code>{</code>

<code>public</code><code>:</code>

<code>    </code><code>Stack(</code><code>int</code> <code>MaxSize=10);</code>

<code>    </code><code>~Stack();</code>

<code>    </code><code>bool</code> <code>IsEmpty()</code><code>const</code><code>{</code><code>return</code> <code>top==0;}</code>

<code>    </code><code>bool</code> <code>IsFull()</code><code>const</code><code>{</code><code>return</code> <code>top==MaxTop;}</code>

<code>    </code><code>T Top()</code><code>const</code><code>;</code>

<code>    </code><code>Stack&lt;T&gt;&amp;Add(</code><code>const</code> <code>T &amp;x);</code>

<code>    </code><code>Stack&lt;T&gt;&amp;Delete(T&amp;x);</code>

<code>    </code><code>int</code> <code>GetStackSize()</code><code>const</code><code>;</code><code>//确定堆棧的大小</code>

<code>private</code><code>:</code>

<code>    </code><code>int</code> <code>top;</code>

<code>    </code><code>int</code> <code>MaxTop;</code>

<code>    </code><code>T *stack;</code><code>//堆棧元素數組</code>

<code>};</code>

<code>//構造函數</code>

<code>Stack&lt;T&gt;::Stack(</code><code>int</code> <code>MaxSize)</code>

<code>    </code><code>MaxTop=MaxSize-1;</code>

<code>    </code><code>stack=</code><code>new</code> <code>T [MaxSize];</code>

<code>    </code><code>top=-1;</code><code>//因為top=0的時候等于已經有一個元素了,是以這裡為-1</code>

<code>}</code>

<code>//析構函數</code>

<code>Stack&lt;T&gt;::~Stack()</code>

<code>    </code><code>delete</code> <code>[] stack;</code>

<code>//彈出棧頂</code>

<code>T Stack&lt;T&gt;::Top()</code><code>const</code>

<code>    </code><code>if</code><code>(IsEmpty())</code><code>throw</code> <code>OutOfBounds();</code>

<code>    </code><code>else</code>

<code>    </code><code>return</code> <code>stack[top];</code>

<code>//壓入棧</code>

<code>Stack&lt;T&gt;&amp;Stack&lt;T&gt;::Add(</code><code>const</code> <code>T &amp;x)</code>

<code>    </code><code>if</code><code>(IsFull())</code>

<code>        </code><code>throw</code> <code>NoMem();</code>

<code>    </code><code>top++;</code>

<code>    </code><code>stack[top]=x;</code>

<code>    </code><code>return</code> <code>*</code><code>this</code><code>;</code>

<code>//彈出棧</code>

<code>Stack&lt;T&gt;&amp;Stack&lt;T&gt;::Delete(T&amp;x)</code>

<code>    </code><code>if</code><code>((IsEmpty()))</code>

<code>        </code><code>throw</code> <code>OutOfBounds();</code>

<code>    </code><code>x=stack[top];</code>

<code>    </code><code>top--;</code>

<code>//确定堆棧的大小</code>

<code>int</code> <code>Stack&lt;T&gt;::GetStackSize()</code><code>const</code>

<code>    </code><code>if</code><code>(IsEmpty())</code>

<code>    </code><code>int</code> <code>len=top;</code>

<code>    </code><code>return</code> <code>++len;</code>