可以看到,如果把栈底位置的下标标注为-1, 那么数据1所在的位置下标为0,数据2所在的位置下标为1,;以此类推,数据n所在的位置下标为n-1。实际上,数据1~数据n的存储形式就是列表,只不过这种列表里面的数据操作是受限制的,只能对列表中的最后一个元素进行操作。
Python代码实现判断栈空,判断栈满,出栈,入栈操作:
class Stack():
def __init__(self,size):
self.data = ["null" for i in range(0,size)] # 初始化长度为(Size)的列表, 赋值给data
self.size = size # 对栈的大小进行初始化
self.top = -1 # 对栈顶指针进行初始化
def Empty(self):
if self.top==-1:
return True
else:
return False
def Full(self):
if self.top==self.size - 1:
return True
else:
return False
def push(self, content):
if self.Full():
print("栈已满,不允许入栈!")
else:
self.top = self.top + 1
self.data[self.top] = content
def out(self):
if self.Empty():
print("栈已空, 不允许出栈!")
else:
print(self.data[self.top])
self.data[self.top] = "null"
self.top = self.top - 1
s = Stack(4)
s.push("Apple")
s.push("Pear")
s.push("Banana")
s.push("Peach")
s.push("Hamimelon")
s.out()
s.out()
输出:
栈已满,不允许入栈!
Peach
Banana
那么,栈这种数据结构在什么时候才能够应用到呢?
举例子:
事实上,凡是先进后出的业务逻辑执行流程都可以使用到这种数据结构。不妨假定这样的情景:现在有4个应用程序 A、B、C、D,系统同时最多只能执行一个应用程序,具体执行哪个应用程序由使用者进行选择,此时希望,如果前一个应用程序已经执行,而使用者又开启了一个新的应用程序,系统优先执行新开启的程序,而原程序进入挂起状态,当新开启的程序执行完毕之后,再依次激活原程序进行执行。也就是说,这里程序的执行方案是,新开启的程序优先于已开启的程序执行。