資料結構(九)

2021-07-23 19:03:48 字數 1640 閱讀 9012

靜態鍊錶

用陣列描述的鍊錶叫做靜態鍊錶該資料下標都對應乙個data(存放資料元素)和乙個cur(存放該元素的後繼在陣列中的下標)

//線性表的靜態鍊錶儲存結構

#define maxsize 1000 //假設鍊錶的最大長度為1000

typedef struct

comment,staticlinklist[maxsize];

陣列的第乙個元素,即下標為0的元素的cur就存放備用鍊錶(未被使用的陣列元素)的第乙個結點的下標;而陣列的最後乙個元素的cur則存放第乙個有數值的元素的下標。

靜態鍊錶的插入

用靜態模擬動態鍊錶結構的儲存空間的分配,需要,無用時申請釋放。

為辨明陣列中陣列中哪些分量未被使用,解決的辦法是將所有未被使用過的及已被刪除分量用游標鏈成乙個備用的鍊錶,每當進行插入時,便可以從備用鍊錶上去的第乙個結點作為帶插入的新結點

//若備用空間鍊錶非空,則返回分配的結點下標,否則返回0

int malloc_sll(staticlinklist space)

return i;

}

這段**一方面的作用就是返回乙個下標值,這個值就是陣列頭元素的cur存的第乙個空閒的下標,從圖例看來,就是返回7.如果下表為7的分量要準備使用了,就把分量7的cur值賦給頭元素,也就是8給space[0].cur

//在l中第i個元素之前插入新的資料元素e

status listinsert(staticlinklist l, int i, elemtype e)

j = malloc_ssl(l); //獲得空閒分量的下標

if(j)

l[j].cur = l[k].cur; //把第i個元素之前的cur賦值給新元素的cur

l[k].cur = j; //把新元素的下標賦值給第i個元素之前元素的cur

return ok;

}return error;

}

靜態鍊錶的刪除操作

//刪除在l中第i個資料元素

status listdelete(staticlinklist l, int i)

for(j = 1; j <= i – 1; j++)

j = l[k].cur;

l[k].cur = l[j].cur;

free_ssl(l,j);

return ok;

}

//初始條件:靜態鍊錶l已存在。   操作結果:返回l中資料元素個數

int listlength(staticlinklist l)

return j;

}

靜態鍊錶優缺點

優點:l  在插入和刪除操作時,只需要修改游標,不需要移動元素,從而改進了在順序儲存結構中的插入和刪除操作需要移動大量元素的缺點

缺點:l  沒有解決連續儲存分配帶來的表長難以確定的問題

l  失去了順序儲存結構隨機儲存的特性

Phthon九 資料結構

1.資料結構就是處理一些資料的結構。或者說,它們是用來儲存一組相關資料的。在python中有三種內建的資料結構 列表 元組和字典 2.列表 list是處理一組有序專案的資料結構,即你可以在乙個列表中儲存乙個序列的專案。在python中,每個專案之間用逗號分割。列表中的專案包括在方括號中。一旦建立了乙...

資料結構 九 計數排序

1 演算法流程 1 求取待排序陣列a 的最大值 max 2 建立乙個新的陣列c max 1 用於統計陣列 a中的每個元素 a,小於等於 a的個數。3 根據小於等於a 的個數,來確定排序後,a在排序陣列中的位置,進行位置填充 2 實現 寫 需要注意事項 1 計數統計結束後,我們根據c a 的大小填充元...

九 Transaction資料結構 UTXO 錢包

經過前面1序列的鋪墊,我們熟悉了各種基本概念,這1課,將進入最核心的原理的講解 transaction與utxo。這2個東西,是整個區塊鏈的核心的核心,後續一切,都基於對這個的深刻理解。transaction之間的網狀關係 一切交易可追溯 考慮如下場景 使用者a和使用者b之間發生了乙個交易t3,a向...