但是資料這種儲存結構存在一些問題:
咋辦捏,有乙個很樸素的想法就是,讓前面乙個人記住後面乙個人,不用關心整體,只要前後關聯就ok。這種資料結構即為鏈式儲存線性表。
因為c語言支援指標啊,讓前面乙個記住後面乙個,太簡單了啊,直接讓前面乙個的指標指向後面乙個完事。那第乙個咋辦捏,第乙個沒有前面乙個啊,那也麼事,我們直接定義乙個頭部指向第乙個元素,也就是說頭部實際上不是線性表的資料部分,但是它能把鏈式線性表關聯出來。
就像火車頭,雖然不拉乘客,但是能帶著乘客去他們想去的地方。這個比喻實在太形象了,厲害炸了~
此處跟順序線性表一模一樣,因為都是線性表嘛,功能一樣,只是儲存結構不一樣。
顯示線性表元素個數
列出線性表的所有元素
獲取指定位置元素
在指定位置插入元素
刪除指定位置元素
清空線性表
話不多說,說多了上頭。酒不多喝,喝多了會難受,直接上**~
ps:我自己測試沒發現bug,但是不能保證肯定沒有bug…保佑我~!
/*
* 鏈式儲存線性表*/#
include
// 線性表的節點結構體
typedef
struct
node;
// 獲取元素個數
intgetcount
(node *head)
return count;
}// 顯示所有元素
void
printlist
(node *head)
}// 獲取指定位置元素,返回值放入result指向元素,注意位置從0開始
intgetdata
(node *head,
int index,
int*result)
node* p = head;
//定義乙個指標首先指向頭結點
while
(p->next !=
null
) i++;}
if(i >= index)
//位置超限
return1;
//1表示成功
}// 插入元素
intinsertdata
(node *head,
int index,
int input)
if(index ==0)
//第乙個位置插入元素
node* p = head;
//定義乙個指標首先指向頭結點
while
(p->next !=
null)}
if(i == index)
//最後乙個後面追加
else
return1;
}// 刪除指定位置元素
intdeletedata
(node *head,
int index)
node* p = head;
//定義乙個指標首先指向頭結點
node* front = head;
//記錄前乙個元素
while
(p->next !=
null
) i++;}
if(i >= index)
//位置超限
return1;
//1表示成功
}// 清空所有元素
intcleardata
(node *head)
head->next =
null
;return1;
}// 入口
intmain()
資料結構 線性表的鏈式儲存結構(C語言)
線性表的鏈式儲存結構之鍊錶 實現鍊錶的插入,刪除 include include typedef int elemtype typedef int status typedef struct node node typedef struct node linklist 插入資料 status lis...
資料結構 鏈式儲存線性表
鏈式儲存結構的線性表 簡稱為鍊錶 將採用一組位址任意的儲存單元存放線性表中的資料元素,鏈式結構的線性表不會按線性的邏輯順序來儲存資料元素,它需要在每乙個資料元素裡儲存乙個引用下乙個資料元素的引用。優點 插入 刪除元素快,充分利用計算機記憶體空間 缺點 查詢元素需要整體遍歷,空間開銷大 單鏈表 cre...
資料結構4 線性表的鏈式儲存結構(2)
單鏈表的題目 1 單鏈表的反轉 思路 借助三個指標p1,p2,p3。讓p1 head p2 p1 nect p3 p2 next 之後將p2 next p1 然後將p1,p2 p3順序後移,一直到p3為空就會將鍊錶反轉。特殊情況陣列中只有沒有或者只有乙個節點時,直接返回就可以。void linkli...