<code>#ifndef IOSTREAM</code>
<code>#include <iostream></code>
<code>#endif</code>
<code>template</code><code><</code><code>class</code> <code>T></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<T>&Add(</code><code>const</code> <code>T &x);</code>
<code> </code><code>Stack<T>&Delete(T&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<T>::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<T>::~Stack()</code>
<code> </code><code>delete</code> <code>[] stack;</code>
<code>//彈出棧頂</code>
<code>T Stack<T>::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<T>&Stack<T>::Add(</code><code>const</code> <code>T &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<T>&Stack<T>::Delete(T&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<T>::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>