二 线性表
一. 線性表的幾種形式:
1.線性表是最常用且最簡單的一種數據結構. 線性表中元素的個數n定義為線程表的長度,n= 0時稱為空表.
2. 線性表的順序表示指的是用一組地址連續的存儲單元依次存儲線性表的數據元素. 這種順序存儲結構的線性表為順序表.
??? 線性表的特點: 優點是:可以隨機存取的存儲結構
?? 缺點是:插入和刪除時間復雜度高,主要耗費在移動元素上. 時間復雜度O(n).內存中有許多的內存碎片,內存碎片都很小,不能,必須開辟新的空間.
???? 數組
3.線性表的鏈式表示和實現? [字典,集合]
? 鏈式表是一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以不是連續的). 一般叫做線性鏈表或單鏈表.? 時間復雜度為(n)
?? 概念: 每一個元素叫做節點,
?????????? 里面存儲數據元素的信息叫做數據域,
?????????? 存儲直接后繼存儲位置的域叫做指針域.
?????????? 頭指針: 指向鏈表中第一個結點; 最后一個結點指針域為空”NULL”
????????? 重點: 線性表的單鏈表的存儲結構是結構體: 數據域和指針域[本結構體類型的指針]
4. 循環鏈表: 另一種鏈式的存儲結構
??? 單循環鏈表: 表的最后一個結點的指針域執行頭結點,整個鏈表形成一個環,
??? 雙向鏈表: 一個結點有兩個指針域,一個指向直接后繼,一個指向直接前繼.
二 棧
棧和隊列是兩種重要的線性結構. 是特殊的線性表結構,操作收到了限制.
對于棧來說,表尾為棧頂, 表頭為棧尾,不含元素為空棧,
先進后出的原則(LIFO)
棧的實際應用: 括號匹配的檢驗
棧與遞歸: 棧在程序設計中實現遞歸:
一個直接調用自己或者通過一系列的調用語句間接的調用自己的函數,叫遞歸函數.
這里主要討論遞歸是如何執行的?
當一個函數的運行期間調用另一個函數時,在運行被調用函數之前,
系統需要先完成三件事:
(1) 將所有的實在參數,返回地址等信息傳遞給被調用函數保存;
(2)為被調用函數的局部變量分配存儲區;(3) 將控制轉移到被調用函數的入口.
?而從被調用調用函數返回調用函數之前,系統也完成3件事:
(1) 保存被調函數的計算結果 (2) 釋放被調函數的數據區 (3)依照被調函數保存的返回地址將控制轉移到調用函數;
原理: 函數之間的信息傳遞和控制轉移必須通過棧來實現, 程序運行的時所需的數據空間安排到一個棧中,每當調用一個函數的時候,就為她在棧頂分配一個存儲區,每當從一個函數退出時,就釋放它的存儲區,則 當前正在運行的函數的數據區必須在棧頂. 遞歸函數也屬于函數的嵌套調用,原理也是一樣的,原則:后調用先返回;
隊列: 是先進先出(FIFO)的線性表.允許插入的一端叫做隊尾,允許刪除的一端則稱為對頭; 隊列在程序設計中也經常出現,一個最典型的例子就是操作系統中的作業隊列;
轉載于:https://www.cnblogs.com/xiaofei76/p/5496766.html
總結
- 上一篇: Linux常用服务部署与优化之NFS篇
- 下一篇: 一起来学习android自定义控件3——