python 栈和队列_python 栈和队列的基本实现
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: apple ii 模拟器 mac_苹果自
- 下一篇: python创建空字典_Python创建