邏輯結構:表內元素的關係,共有集合、線性結構(線性表、棧、佇列、陣列)、樹形結構(樹、二叉樹、森林)、圖結構(圖)四種;
儲存結構:是資料在計算機中的實現,也叫物理結構,常用的是順序儲存和鏈式儲存。
順序儲存指的是所有儲存結點放在乙個連續的儲存區中;
鏈式儲存指的是儲存結點不一定存放在乙個連續的儲存區,結點間的邏輯關係靠結點中的指標來確定。
線性表的順序儲存,我們稱之為順序表。
順序表的所有資料都儲存在乙個連續的儲存區,當執行插入、刪除等操作的時候,乙個結點有變化就會影響後面的所有結點。
計算演算法的時間複雜度,乙個重要的指標是資料元素的比較和移動的次數。
順序表的讀表元素和求表長演算法,只執行一次就能出結果,時間複雜度為o(1)。
順序表的定位演算法:1、遍歷表中資料,查詢所求值;2、找到則返回結點需要的最小值;3、找不到則返回0。
要遍歷表,時間複雜度與表長有關,時間複雜度為o(n)。
順序表的插入演算法:1、確定插入結點位置(定位);2、將該結點及後面所有位置的結點後移;3、將插入結點放入空出來的位置;4、表長增加。
最好的情況下是插入到表尾,沒有資料移動,最壞的情況下是插入到表頭,所有均資料移動。平均下來(0+n)/2,插入演算法的時間複雜度是o(n)。
順序表的刪除演算法:1、確定原被刪除結點位置;2、將其後的結點左移,覆蓋被刪除結點;2、表長減少。
情況插入步驟相同,其時間複雜度為o(n)。
線性表也可以使用鏈式儲存,根據指標的指向,線性表的鏈式儲存劃分成單鏈表、迴圈鍊錶、雙向迴圈鍊錶三類。
單鏈表指標方向是唯一的,直接前驅指向該結點,該結點再指向直接後繼;
迴圈鍊錶就是單鏈表的最後乙個結點的指標指向第乙個結點,形成環結構;
雙向迴圈鍊錶在迴圈鍊錶的基礎上,每個結點再新增乙個指標,這類指標均用於指向直接前驅(每個結點含兩個指標)。
單鏈表任何相鄰的結點都通過乙個指標(相當於火車的車鉤)相連,因此要想獲取後乙個結點必須遍歷前面所有的結點。
單鏈表的初始化演算法:1、建立頭結點;2、指標域為null;3、用乙個linklist型別變數指向新建立的結點。
單鏈表的求表長演算法:1、帶計數器的工作指標p,指向頭結點;2、工作指標移動乙個結點,計算器加1;3、p=p→next時計算器的值。
單鏈表的讀表元素演算法:1、遍歷該元素前面所有結點,2、讀操作。時間複雜度為o(n)。
單鏈表的定位演算法:1、從頭至尾訪問結點;2、返回序號。時間複雜度為o(n)。
單鏈表的刪除運算:1、找到待刪結點的直接前驅(定位);2、刪除待刪結點;3、待刪結點的直接前驅指向直接後繼。時間複雜度為o(n)
實現單鏈表建表過程有三種方法:
方法一(插入演算法):新增結點插入到表尾,新增插入都會遍歷表。
整個建表過程的計算量為[n(n-1)]/2,時間複雜度是o(2^2);
方法二(尾插):設定指標指向尾結點,新增結點插入到尾結點即可,形成鍊錶資料順序與輸入順序相反。
整個建表過程,時間與元素個數成正比,時間複雜度是o(n);
方法三(前插):新增結點插入到表頭,每次插入到第乙個資料結點之前,形成鍊錶資料順序與輸入資料順序相同。其時間複雜度也是o(n)。
順序表與單鏈表時間複雜度的比較:
按位置查詢,順序表執行一次操作即可o(1),單鏈表要遍歷到該位置才能找到,o(n);
定位演算法,均需要遍歷全表才能返回最小的序號,時間複雜度均為o(n)。
插入演算法,順序表,先定位o(1),新增結點後的右移,時間複雜度為o(n);單鏈表,先定位o(n),其他結點不移動,時間複雜度也為o(n)。
刪除演算法與插入演算法相同。
資料結構 線性結構 儲存 運算 時間複雜度
邏輯結構 表內元素的關係,共有集合 線性結構 線性表 棧 佇列 陣列 樹形結構 樹 二叉樹 森林 圖結構 圖 四種 儲存結構 是資料在計算機中的實現,也叫物理結構,常用的是順序儲存和鏈式儲存。順序儲存指的是所有儲存結點放在乙個連續的儲存區中 鏈式儲存指的是儲存結點不一定存放在乙個連續的儲存區,結點間...
資料結構 線性結構
typedef int position typedef struct lnode list struct lnode 初始化 list makeempty 查詢 define error 1 position find list l,elementtype x 插入 bool insert lis...
資料結構 線性結構
線性表基本操作有 1 list makeempty 初始化乙個新的線性表 2 elementtype findkth list l,int i 根據指定的位序i,返回l中相應元素ai i是下標 3 position find list l,elementtype x 已知x,返回線性表l中與x相同的...