本文首發於我的個人部落格suixin』s blog棧(stack,堆疊)是限制在表的一端進行插入和刪除運算的線性表,通常稱插入、刪除的這一端為棧頂(top),另一端為棧底(bottom)。先進後出(filo)。top= -1時為空棧,top=0只能說明棧中只有乙個元素,並且元素進棧時top應該自增。
順序儲存棧:順序儲存結構;
鏈棧:鏈式儲存結構。插入和刪除操作僅限制在鏈頭位置上進行。棧頂指標就是鍊錶的頭指標。通常不會出現棧滿的情況。 不需要判斷棧滿但需要判斷棧空;
堆疊溢位一般是迴圈的遞迴呼叫、大資料結構的區域性變數導致的。
時間複雜度
平均:訪問
搜尋插入刪除棧
o(n)
o(n)
o(1)
o(1)
最差:訪問
搜尋插入刪除棧
o(n)
o(n)
o(1)
o(1)
空間複雜度
**最差:**o(n)
使用python中的list可以簡單的實現堆疊。
class
stack
(object):
"""堆疊"""
def__init__
(self)
: self.items =
defis_empty
(self)
:return self.items ==
defpeek
(self)
:"""返回棧頂元素"""
if self.is_empty():
return
return self.items[
len(self.items)-1
]def
push
(self, item)
:"""壓棧"""
defpop
(self)
:"""出棧"""
if self.is_empty():
return
return self.items.pop(
)def
size
(self)
:return
len(self.items)
deftest()
: s = stack(
)print
('棧是否為空:'
, s.is_empty())
print
("壓棧'2'"
) s.push(2)
print
('棧頂為:'
, s.peek())
print
("壓棧'3'"
) s.push(3)
print
("棧頂為:"
, s.peek())
print
("出棧"
) s.pop(
)print
("棧的大小:"
, s.size())
if __name__ ==
'__main__'
: test(
)
資料結構:棧
基礎知識 棧
特點 後進先出 類似於乙個桶.結構定義 棧頂初始化為 1 int data 資料區 int max size,top index 棧頂指標下標入棧 棧頂指標向上移動一位出棧 棧頂指標向下移動一位表示式求值兩個棧,乙個裝數,乙個裝符號.用isdigit 函式分辨他是否為數字0 9 返回值 是 1 否 ...
棧的基礎知識
棧 stack 是一種特殊的線性表,其包括順序棧 seqstack 和鏈式棧 linkedstack 棧的基本操作包括建立棧 判斷棧是否為空 isempty 入棧 push 出棧 pop 和取棧頂元素 get 等,其實現的介面如下所示 public inte ce sstack 1 順序棧 seqs...
棧的基礎知識
棧 棧是限定在表尾進行插入和刪除操作的線性表 佇列是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表。lifo。棧的插入操作,叫做進棧,也稱為壓棧,入棧。子彈入彈夾 ...