(一)棧
1、棧是一種後進先出,先進後出的資料結構。
2、棧是一種操作受限的線性表,只允許在一端插入和刪除資料。
3、棧主要包含2個操作,入棧和出棧
4、棧可以用陣列實現,也可以用鍊錶實現。用陣列實現的棧叫做順序棧,用鍊錶實現的棧叫做鏈式棧。
例如:現在有乙個空瓶子。
1、我們依次放入多個蘋果
2、從瓶子中取蘋果的時候,最後放進去的蘋果會最先取出來,最先放進去的蘋果最後取出來。
3、只能從瓶口放入或取出蘋果。(只允許在一端插入和刪除資料)
用陣列實現乙個棧:(這裡用列表代替了)
1(二)佇列class
arraystack():
23 items = #
這裡用列表代替了
4 count = 0 #
棧中的元素個數
5 n = 10 #
棧的大小67
defpush(self ,item):
8"""9入棧
10:param item:
11:return:
12"""
13if len(self.items) >= self.n: return false #
棧已經滿了
1415 self.count += 1
16return
true
1718
defpop(self):
19"""
20出棧
21:return:
22"""
23if len(self.items) == 0: return false #
棧為空24 item =self.items.pop()
25 self.count -= 1
26return item
1、佇列是一種先進先出的資料結構。例如:超市排隊付款,排在前面的先付完款,然後先出去。後來的只能排隊,不允許插隊。
2、棧只支援2個基本操作入棧(
push
)和出棧(
pop)。佇列也只支援
2個基本操作,入隊
enqueue()
,放乙個資料到佇列尾部;出隊
dequeue()
,從佇列頭部取乙個元素。
3、佇列和棧一樣。也是一種操作受限的線性表結構。
4、跟棧一樣,也可以用陣列或鍊錶實現。用陣列實現的佇列叫順序佇列,用鍊錶實現的佇列叫鏈式佇列。
用陣列實現乙個佇列(這裡用列表代替了):
1(三)練習題class
arrayqueue():
23 items = #
陣列4 head = 0 #
隊頭索引
5 tail = 0 #
隊尾索引67
def__init__
(self,n):
8 self.n = n #
陣列大小910
defenqueue(self,item):
11"""
12入隊
13:param item:
14:return:
15"""
16if self.tail == self.n: return false #
隊尾索引等於陣列大小,表示佇列滿了
1718 self.tail += 1
19return
true
2021
defdequeue(self):
22"""
23出隊
24:return:
25"""
26if self.head == self.tail: return false #
隊頭索引==隊尾索引,表示隊列為空
27 item =self.items[self.head]
28 self.items[self.head] = "x"
#標識已經刪除
29 self.head += 1
30return item
將左括號壓入棧
7elif the_dict[stack.pop()] != i: return false #
如果字串中的右括號不等於預期的右括號,返回false
8return len(stack) == 1
資料結構(二) 棧棧與佇列
棧 stack 是限制插入和刪除只能在乙個位置上進行的表,該位置是表的末端,叫做棧頂 top 它是後進先出 lifo 的。對棧的基本操作只有push 進棧 和pop 出棧 兩種,前者相當於插入,後者相當於刪除最後的元素。實現 利用乙個單鏈表來實現棧的資料結構。而且,因為我們都只針對棧頂元素進行操作,...
資料結構 二 棧 佇列 遞迴
1.用陣列實現乙個順序棧 用陣列實現乙個順序棧 define maxsize 64 棧的最大容量 typedef struct sqstack,sqslink 順序棧說明符 置棧空 void clearstack sqslink s 判棧空 intemptystack sqslink s 元素x進棧...
資料結構筆記 棧和佇列
棧和佇列的特性,乙個是先進後出,乙個是先進先出。對於棧來說,可以通過鍊錶或者陣列來進行實現 對於順序棧來說,如下 順序棧類seqstack的類定義 const int stacksize 10 10是示例性的資料,根據實際問題具體定義 template 定義模板類seqstack class seq...