數據結構

數據結構
   數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或者多種特定關係的數據元素集合。通常情況下,精心選擇的數據結構可以帶來更高效的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。
   數據結構是ADT(抽象數據類型)的物理實現。
   程序 = 數據結構 + 算法
   算法是爲了解決問題而設計的,數據結構是算法需要處理問題的載體。
   1.順序表:順序表是在計算機內存中以數組的形式保存的線性表,線性表的順序存儲是指用一組地址連續的存儲單元依次存儲線性表中的各個元素、使得線性表中在邏輯結構上相鄰的數據元素存儲在相鄰的物理存儲單元中,即通過數據元素物理存儲的相鄰關係來反映數據元素之間邏輯上的相鄰關係,採用順序存儲結構的線性表通常稱爲順序表。順序表是將表中的結點依次存放在計算機內存中一組地址連續的存儲單元中。
   將表中元素一個接一個的存入一組連續的存儲單元中,這種存儲結構是順序結構。
   2.鏈表:鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱爲結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。 相比於線性表順序結構,操作複雜。由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的複雜度,比另一種線性表順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而線性表和順序表相應的時間複雜度分別是O(logn)和O(1)。
   使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針域,空間開銷比較大。鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同於這些數據項目在記憶體或磁盤上順序,數據的存取往往要在不同的排列順序中轉換。鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。鏈表可以在多種編程語言中實現。像Lisp和Scheme這樣的語言的內建數據類型中就包含了鏈表的存取和操作。程序語言或面嚮對象語言,如C,C++和Java依靠易變工具來生成鏈表。
   3.棧:棧是限定僅在表頭進行插入和刪除操作的線性表。要搞清楚這個概念,首先要明白”棧“原來的意思,如此才能把握本質。"棧“者,存儲貨物或供旅客住宿的地方,可引申爲倉庫、中轉站,所以引入到計算機領域裏,就是指數據暫時存儲的地方,所以纔有進棧、出棧的說法。 
   首先系統或者數據結構棧中數據內容的讀取與插入(壓入push和 彈出pop)是兩回事!插入是增加數據,彈出是刪除數據 ,這些操作只能從棧頂即最低地址作爲約束的接口界面入手操作 ,但讀取棧中的數據是隨便的沒有接口約束之說。很多人都誤解這個理念從而對棧產生困惑。 [1] 而系統棧在計算機體系結構中又起到一個跨部件交互的媒介區域的作用 即 cpu 與內存的交流通道 ,cpu只從系統給我們自己編寫的應用程序所規定的棧入口線性地讀取執行指令, 用一個形象的詞來形容它就是pipeline(管道線、流水線)。cpu內部交互具體參見 EU與BIU的概念介紹。  
   棧作爲一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
   棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱爲棧頂(top),另一端爲棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數爲零時稱爲空棧。插入一般稱爲進棧(PUSH),刪除則稱爲退棧(POP)。棧也稱爲後進先出表。棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章