认识算法之数据结构 (四) 栈的认识

556 阅读2分钟



从开始的一天一更,到三天一更,到现在的一周一更.....很抱歉,辜负了曾经许下的一天一更的豪言壮志,但目前太多东西要学了,尤其是学校的jsp课程和自学的java,占用的时间比较多,但我还是希望能坚持写下去。

在上周写的文章中,有个朋友对我的文章发表了一些看法:


认为我的文章中关于代码没怎么讲,其实,我开这系列的专栏目的是为了能让自己更加理解对数据结构的认识,所以将所学到的内容以文章的形式记录下来,同时也希望以此让各位对我学习数据结构过程的错误指出来,少走些弯路,那接下来我也会尽量上些代码吧。

栈(Stack)

今天我们来讲一下栈(Stack),之前我写过顺序表链表,而这个栈也是和顺序表链表类似,是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如图(一)所示:

                               

我们可以看到,栈的底部是封闭的,而顶部是开放的,这就说明,栈的存取数据的操作只能在一端进行,所以我们可以把能进行操作数据的一端为栈顶(Stack top),封闭的一端为栈底(Bottom)。

栈的基本操作:

栈有三个基本操作,进栈(Push)出栈(Pop)获取栈顶元素(peek)

数据进出栈遵循先进后出原则(LIFO),因为刚刚说到栈的底端是封闭的,而先进来的数据,会被放入栈的底部,然后依次往上叠。因此我们便可得知出栈的规则则是,从最上面,也就是最新的数据开始取出的。

进栈(Push)

  其实现代码如下:


出栈(Pop)

    

出栈代码的实现:


获取栈顶元素(peek)

只进行访问栈顶元素的操作,但不需要出栈。

peek实现代码如下:


因此我们可以知道,栈的添加和移除数据是相对简单的,但不方便的地方在于如果要访问数据只能访问到其顶端的最新数据,如果要读取访问中间的数据时,就只能将其移到栈顶,再使用peek方法进行读取。