从开始的一天一更,到三天一更,到现在的一周一更.....很抱歉,辜负了曾经许下的一天一更的豪言壮志,但目前太多东西要学了,尤其是学校的jsp课程和自学的java,占用的时间比较多,但我还是希望能坚持写下去。
在上周写的文章中,有个朋友对我的文章发表了一些看法:
认为我的文章中关于代码没怎么讲,其实,我开这系列的专栏目的是为了能让自己更加理解对数据结构的认识,所以将所学到的内容以文章的形式记录下来,同时也希望以此让各位对我学习数据结构过程的错误指出来,少走些弯路,那接下来我也会尽量上些代码吧。
栈(Stack)
今天我们来讲一下栈(Stack),之前我写过顺序表和链表,而这个栈也是和顺序表链表类似,是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如图(一)所示:
我们可以看到,栈的底部是封闭的,而顶部是开放的,这就说明,栈的存取数据的操作只能在一端进行,所以我们可以把能进行操作数据的一端为栈顶(Stack top),封闭的一端为栈底(Bottom)。
栈的基本操作:
栈有三个基本操作,进栈(Push),出栈(Pop),获取栈顶元素(peek)。
数据进出栈遵循先进后出原则(LIFO),因为刚刚说到栈的底端是封闭的,而先进来的数据,会被放入栈的底部,然后依次往上叠。因此我们便可得知出栈的规则则是,从最上面,也就是最新的数据开始取出的。
进栈(Push)
其实现代码如下:
出栈(Pop)
出栈代码的实现:
获取栈顶元素(peek)
只进行访问栈顶元素的操作,但不需要出栈。
peek实现代码如下:
因此我们可以知道,栈的添加和移除数据是相对简单的,但不方便的地方在于如果要访问数据只能访问到其顶端的最新数据,如果要读取访问中间的数据时,就只能将其移到栈顶,再使用peek方法进行读取。