資料結構與演算法之 靜態鍊錶

2021-06-20 10:19:16 字數 1830 閱讀 3549

staticlinkedlist.h

/* 靜態鍊錶 */

typedef int elemtype;

#define maxsize 20

typedef struct

component,staticlinkedlist[maxsize];

#define ok 1

#define error 0

typedef int status;

/* 線性表通用操作 */

status initlist(staticlinkedlist l); //建立乙個空的線性表l,將一維資料space中各分量鏈成一備用鍊錶

status listempty(staticlinkedlist l); //若線性表為空返回true,否則返回false

status clearlist(staticlinkedlist l); //將線性表清空

status getelem(staticlinkedlist l,int i,elemtype *e); //將線性表l中第i個位置元素值返回給e

status listdelete(staticlinkedlist l,int i); //刪除線性表l中第i個位置元素,並用e返回值值

int listlength(staticlinkedlist l); //返回線性表l的元素個數

staticlinkedlist.c

#include #include #include #include "staticlinkedlist.h"

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

int malloc_sll(staticlinkedlist l);

/* 將下標為k的空閒結點**到備用鍊錶 */

status free_sll(staticlinkedlist l,int k);

int main(void)

printf("遍歷所有元素:\n");

int len = listlength(l);

printf("長度是%d\n",len);

int j= l[maxsize-1].cur;

int k =0;

while(j && ki)

*e = l[j].data;

return ok;

}int locateelem(staticlinkedlist l,elemtype e)

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

if(j)

if(k == maxsize-1)

else

return ok;

} return error;

}//刪除線性表l中第i個位置元素

status listdelete(staticlinkedlist l,int i)

for(j=1;j優點

缺點

·在插入和刪除時,只需要修改游標,不需要移動元素,

從而改進了在順序儲存結構中的插入和刪除操作需要移動大量元素的缺點

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

·失去了順序儲存結構隨機訪問的特性

靜態鍊錶和單鏈表在查詢、插入與刪除的時間複雜度類似,失去了以陣列為基礎的順序結構隨機訪問的特性,同時也避免了順序結構插入刪除元素時必須移動元素的麻煩,但仍然有固定表長的弊端。

其實靜態鍊錶只是為那些沒有指標的高階語言能夠實現單鏈表的方法。

資料結構與演算法之鍊錶

鍊錶的分類 1 單鏈表 頭插法 只需要維護乙個頭結點即可,常用來模擬堆疊 尾插法 需要維護頭結點和尾結點,常用來模擬佇列。2 雙向鍊錶 雙向遍歷,可以用來儲存網頁的歷史記錄等 3 迴圈鍊錶 經常出現在面試題中,判斷鍊錶是否有環。鍊錶的刪除 方式一 維護兩個指標,current 表示當前節點 和pre...

資料結構與演算法之鍊錶

線性表 線性表的定義 一些元素的序列,維持著元素之間的線性關係。實現線性表的基本需要是 1 能夠找到表首元素 2 從表裡的任意元素出發,能找到它之後的下乙個元素 基於鏈結技術實現的線性表稱為鍊錶。單鏈表 單鏈表的特點總結如下 1 乙個單鏈表由一些具體的表結點組成 2 每個節點是乙個物件,有自己的標識...

C語言 資料結構與演算法 靜態鍊錶

靜態鍊錶 用陣列描述的鍊錶 備用鍊錶 未被使用的陣列元素 建立 define size 1000 為了方便插入資料通常會把陣列建立的大些 typedef struct stlist stlist space size 初始化 初始化靜態鍊錶 void inilist space size 1 cur...