棧是一種後進先出(lifo)的資料結構,在設計演算法時有十分廣泛的應用。對棧的操作是通過將元素壓入棧(放在棧頂),或是將棧頂元素彈出,都是對棧頂元素的操作。若要實現乙個高效的棧,則要考慮到這兩種操作的時間複雜度。
有兩種資料結構可以作為實現棧的基礎:順序表和煉表。在順序表尾端插入或刪除元素的時間複雜度與在鍊錶頭部插入和刪除元素的時間複雜度都是o(1),因此可以考慮將順序表尾部或鍊錶頭部作為棧頂。
class sstack(): #基於順序表技術實現的棧類
def __init__(self): #用list物件_elems儲存棧中元素
self._elems= #所有棧操作都對映到list操作
def is_empty(self):
return self._elems==
def top(self): #取得棧頂元素,不刪除
if self.is_empty():
print('為空棧!')
return
return self._elems[-1]
def push(self,elem): #將元素壓入棧
def pop(self): #將棧頂元素彈出
if self.is_empty():
print('為空棧!')
return
return self._elems.pop()
if __name__ == '__main__':
st=sstack()
for i in range(1,9,2):
st.push(i)
while not st.is_empty():
print(st.pop())
測試結果為
#節點類
class lnode:
def __init__(self,elem,next_=none):
self.elem=elem
self.next=next_
class lstack(): #基於鍊錶技術實現的棧類,用lnode作為節點
def __init__(self):
self._top=none
def is_empty(self):
return self._top is none
def top(self):
if self.is_empty():
print('為空棧!')
return
return self._top.elem
def push(self,elem):
p=lnode(elem,self._top)
self._top=p
def pop(self):
if self.is_empty():
print('為空棧!')
return
p=self._top
self._top=self._top.next
return p.elem
if __name__ == '__main__':
st=lstack()
for i in range(1,10,2):
st.push(i)
while not st.is_empty():
print(st.pop())
測試結果為: 棧的兩種實現方式
一 陣列實現棧 首先需要定義乙個陣列來儲存棧中的資料,並定義乙個變數來記錄陣列中儲存元素的個數,編寫乙個構造方法來構造乙個長度為十得陣列。先頂i有乙個陣列來儲存棧中的元素 private object array 定義陣列中儲存元素的個數 private int size 構造後乙個長度與為10的陣...
棧的兩種實現
順序表實現棧 include include 順序表實現棧 define test head printf n s n function define default sz 5 typedef char datatype typedef struct seqstack seqstack 棧的初始化 ...
棧的兩種實現
棧的基本實現 include stdafx.h include include define maxsize 64 using namespace std 基於陣列實現的棧 class stack 預設建構函式 int push int data 元素入棧 int pop 元素出棧 bool ise...