資料結構 鍊錶

2022-04-03 04:23:00 字數 2021 閱讀 8488

前言

順序表的存貯特點是用物理上的相鄰實現了邏輯上的相鄰,它要求用連續的儲存單元順序儲存線性表中各元素,因此,對順序表插入、刪除時需要通過移動資料元素來實現,影響了執行效率。

這裡介紹線性表鏈式儲存結構,它不需要用位址連續的儲存單元來實現,因為它不要求邏輯上相鄰的兩個資料元素物理上也相鄰,它是通過「鏈」建立起資料元素之間的邏輯關係來,因此對線性表的插入、刪除不需要移動資料元素。

鍊錶是通過一組任意的儲存單元來儲存線性表中的資料元素的,那麼怎樣表示出資料元素之間的線性關係呢?

為建立起資料元素之間的線性關係,對每個資料元素ai,除了存放資料元素的自身的資訊ai 之外,還需要和ai一起存放其後繼ai+1 所在的存貯單元的位址,這兩部分資訊組成乙個「結點」,結點的結構如圖2.6 所示,每個元素都如此。

存放資料元素資訊的稱為資料域,存放其後繼位址的稱為指標域。

因此n個元素的線性表通過每個結點的指標域拉成了乙個「鍊子」,稱之為鍊錶。

因為每個結點中只有乙個指向後繼的指標,所以稱其為單鏈表。

//宣告鍊錶節點型別

typedef struct

listtag listtagnode;

struct

listtag;

//建立鍊錶

listtagnode *create()

//在鍊錶尾新增節點

int linklistinsertbottom(listtagnode *head,int

value)

//新建節點

listtagnode *node;

node = (listtagnode*)malloc(sizeof

(listtagnode));

//節點賦值,此節點為最後乙個節點

node->value =value;

node->next =null;

listtagnode *t =head;

//找到尾指標

while (t->next !=null)

t->next=node;

return1;

}//在煉表頭新增節點

int linklistinserttop(listtagnode *head,int

value)

//新建節點

listtagnode *node;

node = (listtagnode*)malloc(sizeof

(listtagnode));

//節點賦值,此節點跟在頭節點後

node->value =value;

node->next = head->next;

head->next =node;

return1;

}//列印鍊錶

int prindlinklist(listtagnode *head)

listtagnode *t =head;

while (t->next !=null)

return1;

}//修改某個位置的值

int update(listtagnode *head,int index,int

value)

listtagnode *t =head;

int i = 0

;

//要麼是最後乙個節點,要麼超出index

while ((t->next != null)&&(i

>next ==null,退出迴圈,i//

2.i>=index,退出迴圈,t->next != null不滿足情況

//3.上面兩種情況同時發生

//如果為最後乙個節點或者超出index才會執行下列語句

if(i == index && i != 0 )

return1;

}int

main ()

資料結構 鍊錶

鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...

資料結構 鍊錶

鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...

資料結構 鍊錶

一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...