python之數據結構淺解與一些定義

數據結構是經過某種方式組織在一塊兒的數據元素的集合,這些元素能夠是數字或字符。python

如:字典是一種經過名字引用值的數據結構。數據結構

python最基本的數據機構是序列。函數

python包含了6中內建序列spa

列表、元組、字符串、Unicode字符串、buffer對象、xrange對象操作系統

python中惟一內建的映射類型是字典指針

函數是組織好的、可重複使用的,用來實現單一或相關聯功能的代碼塊調試

函數的兩種參數code

    形參、實參對象

形參的幾種參數類型遞歸

    必須參數、關鍵字參數、默認參數、可變參數、組合參數

參數的傳遞方式

    按位置傳參(位置傳參)

遞歸函數要理解其定義

一個函數     在它本身的內部     調用自身    就被稱爲遞歸函數。

函數的調用是經過棧這種數據結構實現的。

在遞歸函數中,每進入一次函數調用,棧就會加一層棧幀,每返回一次就會減一層棧幀。

     棧

          什麼是,它是你的電腦內存的一個特別區域,它用來存儲被每個函數(包括mian()方法)建立的臨時變量。棧是FILO,就是先進後出原則的結構體,它密切的被CPU管理和充分利用。每次函數聲明一個新的變量,它就會被「推」到棧中。而後每次一個function退出時,全部關於這個函數中定義的變量都會被釋放(換句話說就是刪除)。一旦棧中的變量釋放,這塊區域就會變成可用的,提供給其餘棧中的變量。

     用棧存儲變量的好處是,內存是被你管理的。你不用手動的建立內存,不用當你不在須要它的時候手動釋放內存。另外,因爲CPU組織棧內存很高效。讀出和寫入棧變量是很快的。

     理解棧的關鍵是理解概念,當一個function退出時,全部它的變量都會從棧中彈出,之後都會永遠消失。所以棧中的變量本質是局部的。這和咱們原來理解爲變量做用域或者本地或者全局變量是相關的。在C中,一個公共的bug 是從你程序中的一個function外嘗試訪問一個在棧中的這個function的變量(在該function已經退出後)。

     關於棧的另外一個特色咱們應該記住,就是存儲再棧中的變量的大小有限制。而堆上建立變量不用考慮。

     總結棧:

      a、棧的生長和伸縮就是函數壓入或者推出局部變量。

      b、咱們不用本身去管理內存,變量建立和釋放都是自動的。

      c、棧中的變量只有在函數建立運行時存在。

      堆

          堆也是咱們的計算機內存中的一個區域,可是他不是自動管理的。並且也不是被CPU密切的管理着。它是一片更加自由的內存區域(很大)。要想在堆上建立內存,咱們必須使用malloc() 或者calloc(),他們都是C語言編譯的。一旦你在堆上分配內存,當你不在須要的時候你必須用free()去銷燬。若是你不銷燬或者銷燬失敗,你的程序就會有內存泄露。換句話說就是堆內存會一直在,其餘進程沒法使用。咱們將會再調試部分看到,那裏有一個叫作Valgrind的東西,它能夠幫助你發現內存泄露。

     不像棧,堆沒有變量大小的限制(除了你電腦的物理限制條件外)。堆內存讀出和寫入都比較慢,由於它必須使用指針圖訪問堆內存。咱們將會下面講解指針。

    棧和堆的優缺點

     棧:

          a、快速訪問。

          b、沒有必要明確的建立分類變量,由於它是自動管理的。

          c、空間被CPU高效地管理着,內存不會變成碎片。

          d、只有局部變量

          e、受限於棧大小(取決於操做系統)

          f、變量不能調整大小。

        堆:

          a、變量能夠被全局訪問

          b、沒有內存大小限制

          c、(相對)訪問比較慢

          d、沒有高效地使用空間,隨着塊內存的建立和銷燬,內存可能會變成碎片。

          e、你必須管理內存(變量的建立和銷燬你必需要負責)

          f、變量大小能夠用realloc( )調整

隊列特色:先進先出、後進後出

堆棧特色:先進後出、後進先出

棧幀也叫過程活動記錄,是編譯器用來實現過程/函數調用的一種數據結構。 從邏輯上講,棧幀就是一個函數執行的環境:函數參數、函數的局部變量、函數執行完後返回到哪裏等等。

相關文章
相關標籤/搜索