写在前面:在学习栈和队列前我先强调一下,栈和队列都是一种编程思想,实现方式有很多种,我们只需要满足栈和队列各自的条件就可以,不必拘泥写一个类
栈
栈是限定仅在表尾进行插入和删除的线性表,允许插入、删除的一端是栈顶,另一端成为栈低,不含任何数据元素的栈称为空栈。
假设S = [x1,x2,x3,x4,x5....xn],x1为栈底元素,xn为栈顶元素,插入和删除只能从xn端操作,进栈只能是按x1,x2,x3,x4,x5....xn的顺序进栈,出栈只能从栈顶出栈,也就是说,先进的数据元素后出去,后进的数据元素先出去。后进先出(LIFO last in fist out)
栈的操作
这里我们先创建一个栈的类,这里我们只是将基础的框架搭建了起来,并没有写具体的函数内容,后面再讲解的时候会具体说明。
# 第一个讲解我们使用的是顺序栈,具体的情况后面会有详细的介绍。 class SequenceStack: """顺序栈""" def __init__(self): """初始化""" self.stack_arr = [] # 栈空间,用列表 self.top = 0 # 指针,指向栈顶 self.maxsize = 10 # 设置栈的最大长度 def push(self): """入栈""" pass def pop(self): """出栈""" pass def gethead(self): """得到栈顶的元素""" pass def isempty(self): """判断栈是否为空""" pass def size(self): """栈中的元素""" pass def next(self): """从栈顶遍历到栈底""" pass def clear(self): """清空栈""" pass
栈的初始化
栈的初始化就是创建一个空的栈,在本文章中栈的初始化就是创建sequencestack
对象
stack = SequenceStack()
入栈
将新的元素添加到栈顶的位置,top
指针向上移1
代码实现
def push(self,arg): """入栈""" if self.top + 1 >= self.maxsize: print("栈已满,请重新选择操作") return self.stack_arr.append(arg) self.top+=1
出栈
删除栈顶的数据元素
代码实现
def pop(self): """出栈""" if self.top < 0: print("栈以空无法出栈") return self.top -= 1 return self.stack_arr.pop()
取栈顶的元素
取栈顶的数据元素,但是不会影响栈的内容
代码实现
def gethead(self): """得到栈顶的元素""" if self.top < 0: print("栈以空") return return self.stack_arr[self.top]
判断栈是否为空
判断栈是否为空
代码实现
def isempty(self): """判断栈是否为空""" if len(self.stack_arr) == 0: return True else: return False
遍历栈中的所有元素
依次访问栈中的元素
代码实现
def next(self): """从栈顶遍历到栈底""" for i in self.stack_arr: print(i)
清空栈
清空栈中的所有内容
代码实现
def clear(self): """清空栈""" self.stack_arr.clear() self.top = -1