可以看到,如果把棧底位置的下標標註爲-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,系統同時最多隻能執行一個應用程序,具體執行哪個應用程序由使用者進行選擇,此時希望,如果前一個應用程序已經執行,而使用者又開啓了一個新的應用程序,系統優先執行新開啓的程序,而原程序進入掛起狀態,當新開啓的程序執行完畢之後,再依次激活原程序進行執行。也就是說,這裏程序的執行方案是,新開啓的程序優先於已開啓的程序執行。