目录
前言:
栈的介绍
Python栈的操作
1.创建栈
2.判断栈是否为满
3.判断栈是否为空
4.压栈
5.出栈
6.展示栈数据
7.获取到栈顶的数据
8.获取到栈的数据总数
第三方模块实现栈
下载模块:
导入模块:
使用示例:
前言:
栈,作为经典的数据结构之一,在很多时候我们都会用到栈,跟链表一样同为线性表,但栈是一种后进先出的数据结构类型,这一点跟前面讲的链表不同。好,那这一期我们就来讲讲栈,以及怎么去通过Python去实现栈等相关操作。
栈的介绍
在日常生活中,我们很多事物都跟栈相关,比如说把一堆书叠起来,书是从下往上叠放的,但当我们想去取书的时候,我们会先把上面的数拿走然后往下找到我们想要的数。这就是栈的表现了。图解如下:
在我们的程序当中,栈也是无时无刻在体现出来,就以网页前端开发为例子,当我们点进去一个网页时,网页会有一个返回上一级的按钮,当我们点击它,我们就会返回到上一个页面,这就是前端设计者利用栈设计出来的
图解:
栈是包含栈底和栈定这两端,当我们往栈里面放入数据时,数据会往栈底压下去,这个过程叫做压栈;当我们取出栈顶的数据时,数据是从栈的顶部依次取出,这个过程叫出栈。那下面就一期来看看怎么通过Python语言去操作栈。
Python栈的操作
Python是一门具有良好面对对象操作的语言,我们可以去通过Python来实现自定义对象的操作,对此我们可以去定义class 出一个栈对象。同时Python当中是有其本身的数据容器的,我们可以通过链表来作为栈的数据容器,通过栈的特点去对列表进行‘改造’。下面就一起来看看吧。
相关操作如下:
整体代码如下:
#栈对象
class Stack(object):
#创建一个空栈
def __init__(self,size,top=-1):
self.size=size #栈的大小
self.top=top #栈的栈顶,初始化为-1
self.stackdata=[] #空列表,作为数据容器
#判断这个栈是否满了
def isfull(self):
return self.top+1==self.size
#判断在栈是否为空栈
def isEmpty(self):
return self.top==-1
#压栈,放入数据
def push(self,val):
if self.isfull(): #要做判断这个栈满了没有
print('stack is full')
return
else:
self.stackdata.append(val)
self.top+=1
#出栈,取出数据
def pop(self):
if self.isEmpty():#要判断这个栈是否为空
print('empty')
return
else:
self.stackdata.pop(self.top)
self.top-=1
#展示栈数据(也就是输出列表)
def showstack(self):
print(self.stackdata)
#获取到栈顶的数据
def peek(self):
if self.top!=-1:
return self.stackdata[self.top]
#返回这个栈多少个数据项
def size(self):
return len(self.stackdata)
下面我会进行一一讲解:
1.创建栈
作为一个栈是有大小,有栈顶指针以及数据存放位置的,那我们就依次建立这些功能,初始化栈顶指针为-1,当我们放入第一个数据的时候,栈顶指针就加一为0,此时正好对应列表第一个数据的下标0。代码如下:
class Stack(object):
#创建一个空栈
def __init__(self,size,top=-1):
self.size=size #栈的大小
self.top=top #栈的栈顶,初始化为-1
self.stackdata=[] #空列表,作为数据容器
2.判断栈是否为满
栈是有大小的,这一点跟纯粹的列表不同,列表你可以放无限个数据进去,但是栈得控制好数据的数量,所以我们在放入数据之前要定义好判断这个栈是否为满的方法,如果满了那就返回False,不允许数据的存入。代码如下:
#判断这个栈是否满了
def isfull(self):
return self.top+1==self.size
3.判断栈是否为空
同样的,取数据之前我们也要去判断这个栈里面有没有数据,也就是判断这个栈是否为空,如果是空栈的话,那就返回True,说明无法取出数据。代码如下:
#判断在栈是否为空栈
def isEmpty(self):
return self.top==-1
4.压栈
每次压入一个数据的时候,栈顶就得往上移动一位加一
#压栈,放入数据
def push(self,val):
if self.isfull(): #要做判断这个栈满了没有
print('stack is full')
return
else:
self.stackdata.append(val)
self.top+=1
5.出栈
同样的,每次出栈一个数据的时候,栈顶就得向下移动一位减一
#出栈,取出数据
def pop(self):
if self.isEmpty():#要判断这个栈是否为空
print('empty')
return
else:
self.stackdata.pop()
self.top-=1
6.展示栈数据
#展示栈数据(也就是输出列表)
def showstack(self):
print(self.stackdata)
7.获取到栈顶的数据
#获取到栈顶的数据
def peek(self):
if self.top!=-1:
return self.stackdata[self.top]
8.获取到栈的数据总数
#返回这个栈多少个数据项
def size(self):
return len(self.stackdata)
第三方模块实现栈
其实已经有人去写了关于栈的第三方模块了,我们只需要从整个模块里面去导入栈的类对象就行了,然后就可以直接去实例化栈对象,进行栈的相关功能操作
下载模块:
导入模块:
from pythonds.basic.stack import Stack
使用示例:
from pythonds.basic.stack import Stack
if __name__=='__main__':
s=Stack()
print(s.isEmpty())
s.push(1)
s.push('hello')
print(s.peek())
print(s.size())
s.push(8.886)
print(s.isEmpty())
s.pop()
s.pop()
print(s.size())
#输出结果:
# True
# hello
# 2
# False
# 1
当然,我并不建议这样子用,最后好我们还是直接去写一个栈的对象,我们可以去根据需求去添加方法,而不是去用别人的。
好了,以上就是本期的全部内容了,我们下期见!
分享一张壁纸:文章来源:https://www.toymoban.com/news/detail-733351.html
文章来源地址https://www.toymoban.com/news/detail-733351.html
到了这里,关于Python数据结构-----栈1.0(栈的介绍与操作)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!