前言
順序表的存貯特點是用物理上的相鄰實現了邏輯上的相鄰,它要求用連續的儲存單元順序儲存線性表中各元素,因此,對順序表插入、刪除時需要通過移動資料元素來實現,影響了執行效率。
這裡介紹線性表鏈式儲存結構,它不需要用位址連續的儲存單元來實現,因為它不要求邏輯上相鄰的兩個資料元素物理上也相鄰,它是通過「鏈」建立起資料元素之間的邏輯關係來,因此對線性表的插入、刪除不需要移動資料元素。
鍊錶是通過一組任意的儲存單元來儲存線性表中的資料元素的,那麼怎樣表示出資料元素之間的線性關係呢?
為建立起資料元素之間的線性關係,對每個資料元素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...