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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

栈与Python

發布時間:2024/3/24 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈与Python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????棧stack和隊列queue都是線性操作的子集。

????????stack只在表尾進行插入或者刪除操作,是線性表。stack的尾端是棧頂(top),表頭是棧底(bottom)。

????????S = (,,…,),是表里第一個元素,稱其為棧底bottom元素,是棧頂top元素,按順序入棧,退棧的第一個元素是棧頂元素。(怎么感覺棧是沸騰片那種,最先裝進去的bottom要最后才能吃到,封裝前放進去的那一片top,顧客是最先吃到的呢嘻嘻)

????????棧是LIFO(last in first out)。

? ? ? ? 在看大三學《數據結構》用的書,當時用C語言上機,現在只看懂大概,不會寫了,淚目。

一、順序棧與鏈棧

? ? ? ? 棧有兩種存儲結構:順序棧、鏈棧。

1.1? 順序棧

????????棧的順序結構是利用一組地址連續的存儲單元一次存放棧底到棧頂的數據元素。C語言上是在此同時放一個指針(記作top)指示棧頂元素,base一直指著棧底,top = base是空棧。

? ? ? ? python使用棧有三種操作:①stack=[];②collections.deque;③queue.LifoQueue. 目的都是實現棧的操作,常用的操作有:empty()、push(a)、pop()、top()、size(),因為是棧,查找中間的棧得不斷拿出來棧頂的。

python中棧的實現 - 老張哈哈哈 - 博客園棧是一種線性數據結構,用先進后出或者是后進先出的方式存儲數據,棧中數據的插入刪除操作都是在棧頂端進行,常見棧的函數操作包括 empty()?– 返回棧是否為空 – Time Complexihttps://www.cnblogs.com/laozhanghahaha/p/12302836.html????????老張哈哈哈的blog寫得挺清楚的,我還是消化了一下。

1.1.1? ?stack=[]

stack = [] #stack = list() # append(a) instand push(a) stack.append('I') stack.append(2) stack.append(['my', 'hometown'])stack Out[1]: ['I', 2, ['my', 'hometown']] #At that time, top is ['my', 'hometown'] and bottom is 'I'#If we pop elements, the rule is: print(stack.pop()) ['my', 'hometown']print(stack.pop()) 2print(stack.pop()) Inot stack #empty? Out[15]: True

1.1.2? collections.deque

????????collections我只用過計數器Counter,使用方式也放下面了。

Python collections.Counter()函數_沃特么.拆基.達柴機的博客-CSDN博客_counter()函數原文鏈接:https://blog.csdn.net/qwe1257/article/details/83272340Python collections.Counter用法什么是collectionsCounterCounter操作例子什么是collectionscollections在python官方文檔中的解釋是High-performance container datatypes,...https://blog.csdn.net/rocking_struggling/article/details/104851741? ? ? ? collections.deque能提供時間復雜度O(1)的append(a)和pop(),比用列表的時間復雜度O(n)優秀。

import collections #from collections import deque stack = collections.deque() #stack = deque()stack.append('hi')stack.append('friend!')type(stack[0]) Out[2]: strtype(stack) Out[3]: collections.dequeprint(stack.pop()) friend!print(stack.pop()) hi

1.1.3? queue.LifoQueue

? ? ? ? 棧是LIFO的線性表,隊列queue也是線性表,這樣記憶挺好的。用queue.LifoQueue可以設置棧的大小(老張的例子設置了),可以不設。用put()放入元素,get()輸出棧頂元素。

from queue import LifoQueuestack = LifoQueue()stack.put('good')stack.put('boy')type(stack[0]) #we will get → TypeError: 'LifoQueue' object is not subscriptabletype(stack) Out[4]: queue.LifoQueueprint(stack.get()) boyprint(stack.get()) goodstack Out[5]: <queue.LifoQueue at 0x1e97666a788>

1.2? 鏈棧

? ? ? ? 還沒遇到相關的題目,留個白

二、棧的應用與對應的leetcode題目

? ? ? ? 棧的應用挺多的,這幾天在leetcode刷簡單題經常遇到,從3月21日開始總結一下,沒寫的是暫時沒有遇到,不代表不能用。

2.1? 括號匹配檢驗(20、有效的括號)

? ? ? ? 題目涉及到順序和急迫匹配的問題。先搞懂什么算是有效,什么是無效。看題目給的輸入和輸出:

輸入 s = "()";s = "()[]{}";s = "{[]}"。輸出 都是true 輸入 s = "(]";s = "([)]"。輸出 都是false

? ? ? ? 觀察可知首先要有對應的括號匹配,其次后來者得匹配完了pop了,先來者才能匹配,有LIFO那味道了。例如s = "([)]",(是第一個輸入的,急切想與)匹配,但第二個輸入的是[,現在最急切的變成 [ 匹配一個 ] ,此時)輸入,與 [ 的需求不匹配,直接就false了。

? ? ? ? 按照這個思路,使用順序棧是再好不過了。

? ? ? ? 但是怎么安排括號配對,需要用字典。字典我再看看,還不太會。哈希表和字典啥關系啊暈。

總結

以上是生活随笔為你收集整理的栈与Python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。