日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 栈和队列_python 栈和队列的基本实现

發(fā)布時(shí)間:2024/7/23 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 栈和队列_python 栈和队列的基本实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python中的列表結(jié)構(gòu)可以用來實(shí)現(xiàn)棧和隊(duì)列。

【?!?#xff1a;

棧是一種數(shù)據(jù)結(jié)構(gòu),具有先入后出的特點(diǎn),并且棧的所有操作只能在某一端進(jìn)行,能進(jìn)行操作的一端的第一個(gè)元素稱為棧頂,另一端的第一個(gè)元素稱為棧底

棧的五種基本方法:

push: 元素進(jìn)棧

pop: 元素出棧,刪除棧頂元素,并返回該元素

isEmpty: 判斷棧是否為空;棧為空,返回True;棧不為空,返回False

peek: 訪問棧頂元素

length: 返回棧中元素的個(gè)數(shù)

1 classStack():2 def __init__(self):3 self.stack =[]4

5 defpush(self, data):6 self.stack.append(data)7

8 defpop(self):9 if notself.isEmpty():10 returnself.stack.pop()11 else:12 print('StackError: fail to pop, the stack is empty.')13

14 defisEmpty(self):15 return self.length() ==016

17 defpeek(self):18 if notself.isEmpty():19 return self.stack[-1]20 else:21 print("The stack is empty.")22

23 deflength(self):24 return len(self.stack)

【隊(duì)列】:

隊(duì)列是一種數(shù)據(jù)結(jié)構(gòu),具有先入先出的特點(diǎn),元素的插入和刪除分別在不同的端進(jìn)行,能夠插入元素的隊(duì)列一端稱為隊(duì)尾,另一端只能刪除元素,稱為隊(duì)首

隊(duì)列的五種基本操作:

push: 從隊(duì)尾插入元素

pop: 從隊(duì)首刪除元素

isEmpty: 判斷隊(duì)列是否為空

peek: 訪問隊(duì)首元素

length: 獲取隊(duì)列中元素個(gè)數(shù)

1 classQueue():2 def __init__(self):3 self.queue =[]4

5 defpush(self, data):6 self.queue.append(data)7

8 defpop(self):9 if notself.isEmpty():10 returnself.queue.pop(0)11 else:12 print('StackError: fail to pop, the stack is empty.')13

14 defisEmpty(self):15 return self.length() ==016

17 defpeek(self):18 if notself.isEmpty():19 returnself.queue[0]20 else:21 print("The queue is empty.")22

23 deflength(self):24 return len(self.queue)

【雙端隊(duì)列】:

deque模塊是Python標(biāo)準(zhǔn)庫collections中的一個(gè)內(nèi)置模塊,實(shí)現(xiàn)雙端隊(duì)列的功能,在隊(duì)列的兩端都可以進(jìn)行插入和刪除

使用list存儲數(shù)據(jù)時(shí),按索引訪問元素很快,但是插入和刪除元素就很慢了,因?yàn)閘ist是線性存儲,數(shù)據(jù)量大的時(shí)候,插入和刪除效率很低。

deque是為了高效實(shí)現(xiàn)插入和刪除操作的雙向列表,適合用于隊(duì)列和棧:

deque的種基本操作:

append: 入隊(duì),從隊(duì)列右端插入一個(gè)元素

appendleft: 入隊(duì),從隊(duì)列左端刪除一個(gè)元素

extend: 迭代處理其輸入,對每個(gè)元素完成與append()相同的處理

extendleft: 迭代處理其輸入,對每個(gè)元素完成與appendleft()相同的處理

pop: 出隊(duì),從隊(duì)列右端刪除一個(gè)元素,并返回該元素

popleft: 出隊(duì),從隊(duì)列左端刪除一個(gè)元素,并返回該元素

rotate:將隊(duì)列的某些元素按某一方向進(jìn)行旋轉(zhuǎn)

1 from collections importdeque2 queue = deque()

3 queue =deque(maxlen=n) # 限制queue的最大長度為n4 queue.append('one') #deque(['one'])

5 queue.appendleft('two') #deque(['two', 'one'])

6 queue.extend('three') #deque(['two', 'one', 't', 'h', 'r', 'e', 'e'])

7 queue.extendleft('four') #deque(['r', 'u', 'o', 'f', 'two', 'one', 't', 'h', 'r', 'e', 'e'])

8 queue.pop() #deque(['r', 'u', 'o', 'f', 'two', 'one', 't', 'h', 'r', 'e'])

9 queue.popleft() #deque(['u', 'o', 'f', 'two', 'one', 't', 'h', 'r', 'e'])

10 queue.rotate(2) #deque(['r', 'e', 'u', 'o', 'f', 'two', 'one', 't', 'h']) ,參數(shù)為正數(shù)n時(shí),將右端的n個(gè)元素依次插入到左端

11 queue.rotate(-3) #deque(['o', 'f', 'two', 'one', 't', 'h', 'r', 'e', 'u']) ,參數(shù)為負(fù)數(shù)n時(shí),將左端的n個(gè)元素依次插入到右端

參考博文: https://www.jb51.net/article/88139.htm

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431953239820157155d21c494e5786fce303f3018c86000

https://docs.python.org/3/library/collections.html#collections.deque

總結(jié)

以上是生活随笔為你收集整理的python 栈和队列_python 栈和队列的基本实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。