python數據結構之棧結構(Python基本數據結構)

本文目錄一覽:

python中的堆棧什麼意思

堆棧是一種執行“後進先出”算法的數據結構。

設想有一個直徑不大、一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到

竹筒裡面,可以發現一種規律:先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以“先進後出”就是這種結構的

特點。

堆棧是計算機中最常用的一種數據結構,比如函數的調用在計算機中是用堆棧實現的。 堆棧可以用數組存儲,也可以用以後會介紹的鏈

表存儲。

堆棧就是這樣一種數據結構。它是在內存中開闢一個存儲區域,數據一個一個順序地存入(也就是“壓入——push”)這個區域之中。

有一個地址指針總指向最後一個壓入堆棧的數據所在的數據單元,存放這個地址指針的寄存器就叫做堆棧指示器。開始放入數據的單元叫

做“棧底”。數據一個一個地存入,這個過程叫做“壓棧”。在壓棧的過程中,每有一個數據壓入堆棧,就放在和前一個單元相連的後面

一個單元中,堆棧指示器中的地址自動加1。讀取這些數據時,按照堆棧指示器中的地址讀取數據,堆棧指示器中的地址數自動減 1。這

個過程叫做“彈出pop”。如此就實現了後進先出的原則。

推薦學習《python教程》。

Python數據結構與算法-利用列表實現棧

概念:

棧:

名稱的由來:這個名字來源於自動售貨機中用彈簧頂住的一堆盤子的隱喻。

概念:這裡提到的棧是一種抽象的數據結構

,而非空間內存分配處涉及的空間存儲的概念。但是大同小異,原理還是來自於對棧空間的理解。這裡的棧是有一系列對象組成的一個集合,這些對象的插入和刪除操作遵循後進先出(LIFO)原則。用戶可以在任意時刻向棧中插入一個對象,但只能取得或者刪除最後一個插入的對象(即所謂的棧頂)。

目的:通過列表實現棧

有些同學可能認為,是不是還有其他操作沒有完成,為什麼不能在中間插入或者其他操作,因為棧不具備這些功能,所以實現的都是棧的常規功能。

利用棧實現數據的逆置

由於LIFO協議的限制,棧可以用作一種通用的工具,用於實現一個數據序列的逆置,這一思想可以用於很多方面,例如以降序

的方式顯示一個數據集,我們可以通過先逐行讀取數據,然後壓如一個棧中,在按照從棧中彈出的順序來寫入。這個方法的實現過程如下:

python中的數據結構分析?

1.Python數據結構篇

數據結構篇主要是閱讀[Problem Solving with Python](Welcome to Problem Solving with Algorithms and Data Structures) [該網址鏈接可能會比較慢]時寫下的閱讀記錄,當然,也結合了部分[算法導論](Introduction to Algorithms)

中的內容,此外還有不少wikipedia上的內容,所以內容比較多,可能有點雜亂。這部分主要是介紹了如何使用Python實現常用的一些數據結構,例

如堆棧、隊列、二叉樹等等,也有Python內置的數據結構性能的分析,同時還包括了搜索和排序(在算法設計篇中會有更加詳細的介紹)的簡單總結。每篇文

章都有實現代碼,內容比較多,簡單算法一般是大致介紹下思想及算法流程,複雜的算法會給出各種圖示和代碼實現詳細介紹。

**這一部分是下

面算法設計篇的前篇,如果數據結構還不錯的可以直接看算法設計篇,遇到問題可以回來看數據結構篇中的某個具體內容充電一下,我個人認為直接讀算法設計篇比

較好,因為大家時間也都比較寶貴,如果你會來讀這些文章說明你肯定有一定基礎了,後面的算法設計篇中更多的是思想,這裡更多的是代碼而已,嘿嘿。**

(1)[搜索](Python Data Structures)

簡述順序查找和二分查找,詳述Hash查找(hash函數的設計以及如何避免衝突)

(2)[排序](Python Data Structures)

簡述各種排序算法的思想以及它的圖示和實現

(3)[數據結構](Python Data Structures)

簡述Python內置數據結構的性能分析和實現常用的數據結構:棧、隊列和二叉堆

(4)[樹總結](Python Data Structures)

簡述二叉樹,詳述二叉搜索樹和AVL樹的思想和實現

2.Python算法設計篇

算法設計篇主要是閱讀[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)[**點擊鏈接可進入Springer免費下載原書電子版**]之後寫下的讀書總結,原書大部分內容結合了經典書籍[算法導論](Introduction to Algorithms),

內容更加細緻深入,主要是介紹了各種常用的算法設計思想,以及如何使用Python高效巧妙地實現這些算法,這裡有別於前面的數據結構篇,部分算法例如排

序就不會詳細介紹它的實現細節,而是側重於它內在的算法思想。這部分使用了一些與數據結構有關的第三方模塊,因為這篇的重點是算法的思想以及實現,所以並

沒有去重新實現每個數據結構,但是在介紹算法的同時會分析Python內置數據結構以及第三方數據結構模塊的優缺點,也就意味着該篇比前面都要難不少,但

是我想我的介紹應該還算簡單明了,因為我用的都是比較樸實的語言,並沒有像算法導論一樣列出一堆性質和定理,主要是對着某個問題一步步思考然後算法就出來

了,嘿嘿,除此之外,裡面還有很多關於python開發的內容,精彩真的不容錯過!

這裡每篇文章都有實現代碼,但是代碼我一般都不會分

析,更多地是分析算法思想,所以內容都比較多,即便如此也沒有包括原書對應章節的所有內容,因為內容實在太豐富了,所以我只是選擇經典的算法實例來介紹算

法核心思想,除此之外,還有不少內容是原書沒有的,部分是來自算法導論,部分是來自我自己的感悟,嘻嘻。該篇對於大神們來說是小菜,請一笑而過,對於菜鳥

們來說可能有點難啃,所以最適合的是和我水平差不多的,對各個算法都有所了解但是理解還不算深刻的半桶水的程序猿,嘿嘿。

本篇的順序按照原書[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)的章節來安排的(章節標題部分相同部分不同喲),為了節省時間以及保持原著的原滋原味,部分內容(一般是比較難以翻譯和理解的內容)直接摘自原著英文內容。

**1.

你也許覺得很多內容你都知道嘛,沒有看的必要,其實如果是我的話我也會這麼想,但是如果只是歸納一個算法有哪些步驟,那這個總結也就沒有意義了,我覺得這

個總結的亮點在於想辦法說清楚一個算法是怎麼想出來的,有哪些需要注意的,如何進行優化的等等,採用問答式的方式讓讀者和我一起來想出某個問題的解,每篇

文章之後都還有一兩道小題練手喲**

**2.你也許還會說算法導論不是既權威又全面么,基本上每個算法都還有詳細的證明呢,讀算法導論豈

不更好些,當然,你如果想讀算法導論的話我不攔着你,讀完了感覺自己整個人都不好了別怪小弟沒有提醒你喲,嘻嘻嘻,左一個性質右一個定理實在不適合算法科

普的啦,沒有多少人能夠堅持讀完的。但是碼農與蛇的故事內容不多喲,呵呵呵**

**3.如果你細讀本系列的話我保證你會有不少收穫的,需要看算法導論哪個部分的地方我會給出提示的,嘿嘿。溫馨提示,前面三節內容都是介紹基礎知識,所以精彩內容從第4節開始喲,么么噠 O(∩_∩)O~**

(1)[Python Algorithms – C1 Introduction](Python Algorithms)

本節主要是對原書中的內容做些簡單介紹,說明算法的重要性以及各章節的內容概要。

(2)[Python Algorithms – C2 The basics](Python Algorithms)

**本節主要介紹了三個內容:算法漸近運行時間的表示方法、六條算法性能評估的經驗以及Python中樹和圖的實現方式。**

(3)[Python Algorithms – C3 Counting 101](Python Algorithms)

原書主要介紹了一些基礎數學,例如排列組合以及遞歸循環等,但是本節只重點介紹計算算法的運行時間的三種方法

(4)[Python Algorithms – C4 Induction and Recursion and Reduction](Python Algorithms)

**本節主要介紹算法設計的三個核心知識:Induction(推導)、Recursion(遞歸)和Reduction(規約),這是原書的重點和難點部分**

(5)[Python Algorithms – C5 Traversal](Python Algorithms)

**本節主要介紹圖的遍歷算法BFS和DFS,以及對拓撲排序的另一種解法和尋找圖的(強)連通分量的算法**

(6)[Python Algorithms – C6 Divide and Combine and Conquer](Python Algorithms)

**本節主要介紹分治法策略,提到了樹形問題的平衡性以及基於分治策略的排序算法**

(7)[Python Algorithms – C7 Greedy](Python Algorithms)

**本節主要通過幾個例子來介紹貪心策略,主要包括背包問題、哈夫曼編碼和最小生成樹等等**

(8)[Python Algorithms – C8 Dynamic Programming](Python Algorithms)

**本節主要結合一些經典的動規問題介紹動態規劃的備忘錄法和迭代法這兩種實現方式,並對這兩種方式進行對比**

(9)[Python Algorithms – C9 Graphs](Python Algorithms)

**本節主要介紹圖算法中的各種最短路徑算法,從不同的角度揭示它們的內核以及它們的異同**

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/271649.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 19:22
下一篇 2024-12-16 19:22

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python實現畫筆方向改變

    本文將介紹如何在Python中實現畫筆方向改變,讓畫筆以中心為軸旋轉。 一、Tkinter庫概述 Tkinter是Python自帶的GUI庫,可用於創建各種GUI應用程序。在Pyt…

    編程 2025-04-29
  • 運維Python和GO應用實踐指南

    本文將從多個角度詳細闡述運維Python和GO的實際應用,包括監控、管理、自動化、部署、持續集成等方面。 一、監控 運維中的監控是保證系統穩定性的重要手段。Python和GO都有強…

    編程 2025-04-29

發表回復

登錄後才能評論