算法系列15天速成 第十天 栈

论坛 期权论坛     
niminba   2021-5-22 14:59   56   0
<br><br>
<p>一: 概念</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;栈,同样是一种特殊的线性表,是一种Last In First Out(LIFO)的形式,现实中有很多这样的例子,</p>
<p>&nbsp; &nbsp; &nbsp;比如:食堂中的一叠盘子,我们只能从顶端一个一个的取。</p>
<p>&nbsp;</p>
<p>二:存储结构</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; ”栈“不像”队列“,需要两个指针来维护,栈只需要一个指针就够了,这得益于栈是一种一端受限的线性表。</p>
<p>&nbsp; &nbsp; &nbsp; 这里同样用”顺序结构“来存储这个”栈“,top指针指向栈顶,所有的操作只能在top处。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-b688a6094abbb25908702e157e516cb3.png"></p>
<p>代码段:</p>
<p></p><div class="codetitle"><span><a class="copybut" data="83262" id="copybut83262"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code83262"><br>#region 栈的数据结构<br>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>/// 栈的数据结构<br>/// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; public class SeqStack&lt;T&gt;<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public T[] data;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>/// 栈顶指针<br>/// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int top = -1;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public SeqStack(int lenth)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = new T[lenth];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; #endregion<br></p></div>
<p><br>三:常用操作</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 栈的操作有:①初始化栈,②入栈,③出栈,④获取栈顶。</p>
<p>1: 初始化栈</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个还是比较简单的,初始化栈时,设置默认top指针为-1,这个就不用图来展示了。</p>
<p>代码段:</p>
<p></p><div class="codetitle"><span><a class="copybut" data="74976" id="copybut74976"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code74976"><br>#region 栈的初始化操作<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>/// 栈的初始化操作<br>/// &lt;/summary&gt;<br>/// &lt;typeparam name="T"&gt;&lt;/typeparam&gt;<br>/// &lt;returns&gt;&lt;/returns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public SeqStack&lt;T&gt; SeqStackInit&lt;T&gt;(int length)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SeqStack&lt;T&gt; seqStack = new SeqStack&lt;T&gt;(length);
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seqStack.top = -1;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return seqStack;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br></p></div>
<p>2:入栈</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个操作主要就是做两件事情:① 将元素从栈顶压入,② top指针自增。</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-89112134f5f1c58978c8eb7baff5dc5c.png"></p><br>
<p>代码段:</p>
<p></p><div class="codetitle"><span><a class="copybut" data="52950" id="copybut52950"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code52950"><br>#region 入栈<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>/// 入栈<br>/// &lt;/summary&gt;<br>/// &lt;typeparam name="T"&gt;&lt;/typeparam&gt;<br>/// &lt;param name="seqStack"&gt;&lt;/param&gt;<br>/// &lt;param name="data"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void SeqStackPush&lt;T&gt;(SeqStack&lt;T&gt; seqStack, T data)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (SeqStackIsFull(seqStack))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception("不好意思,栈溢出");
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seqStack.data[++seqStack.top] = data;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br></p></div>
<p>3:出栈</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同样跟“入栈”类似,需要做两件事情,①干掉top处的元素,②top指针自减。</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-7350ae6bdeabfa8f17e72f8bccaf2a29.png"></p>
<p>代码段</p>
<p></p><div class="codetitle"><span><a class="copybut" data="92470" id="copybut92470"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code92470"><br>#region 出栈<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>/// 出栈<br>/// &lt;/summary&gt;<br>/// &lt;typeparam name="T"&gt;&lt;/typeparam&gt;<br>/// &lt;param name="seqStack"&gt;&lt;/param&gt;<br>/// &lt;returns&gt;&lt;/returns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public T SeqStackPop&lt;T&gt;(SeqStack&lt;T&gt; seqStack)<br>&nbsp;&nbsp;&nbsp;&nbsp;
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP