(二)單鏈表 其實沒有那麼難

2021-10-06 21:16:50 字數 3642 閱讀 1520

單鏈表比較靜態鍊錶更加靈活,長度可變,刪除便捷,唯一較單鏈表費時就是查詢,不能下標查詢。但是總體上比靜態鍊錶有了質的飛躍。

單鏈表最核心的就是指標的靈活使用,以及對較為特殊結構的理解。

結構中最後的指標指向同結構的下個元素,這個指標就像鍊子一樣,乙個接乙個把資料串起來。

typedef

struct singlelist

slist;

另外單鏈表分為含有頭節點的鍊錶和沒有頭節點的鍊錶,插入 方法有頭插法和尾插法。我這裡按照有頭節點的鍊錶進行演示,分別進行頭插法和尾插法,以及常用的增刪改查。

先定義singlelist.h標頭檔案

#pragma once

#include

#include

typedef

struct singlelist

slist;

//建立空頭節點

void

createsinglelist_head()

;//帶有頭節點的頭插法

void

insertsinglelist_withhead

(slist* sl,

int data)

;//帶有頭節點的尾插法

void

insertsinglelist_withtail

(slist* sl,

int data)

;//列印鍊錶

void

printsinglelist

(slist* sl)

;//鍊錶長度

intlengthsinglelist

(slist* sl)

;//刪除 按元素數值刪除 僅刪除一次

intdeletedatasinglelist

(slist* sl,

int data)

;//刪除 按元素位置刪除

intdeletepossinglelist

(slist* sl,

int pos)

;//清空鍊錶僅剩下空頭節點

void

truncsinglelist

(slist* sl)

;//修改指定位置的元素值

intmodifydatasinglelist

(slist* sl,

int pos,

int new_data)

;//獲取指定位置的元素值

intgetdatasinglelist

(slist* sl,

int pos)

;

再對定義的介面函式進行實現,singlelist.c

#pragma once

#include

"singlelist.h"

extern slist* pslhead;

void

createsinglelist_head()

void

insertsinglelist_withhead

(slist* sl,

int data)

void

insertsinglelist_withtail

(slist* sl,

int data)

pnew =

(slist*

)malloc

(sizeof

(slist));

pnew->data = data;

sl->next = pnew;

pnew->next =

null;}

void

printsinglelist

(slist* sl)

}int

lengthsinglelist

(slist* sl)

return i;

}int

deletedatasinglelist

(slist* sl,

int data)

pdata = sl;

while

(pdata)

else

if(pdata->next->data == data)

pdata = pdata->next;

}return-1

;}intdeletepossinglelist

(slist* sl,

int pos)

if(i < pos)

ppos = sl;

for(j =

0; j < pos -

1; j++

) ppos_free = ppos->next;

ppos->next = ppos->next->next;

free

(ppos_free)

;return1;

}void

truncsinglelist

(slist* sl)

sl->next =

null;}

intmodifydatasinglelist

(slist* sl,

int pos,

int new_data)

if(i < pos)

for(j =

0; j < pos ; j++

) sl->data = new_data;

return1;

}int

getdatasinglelist

(slist* sl,

int pos)

if(i < pos)

for(j =

0; j < pos; j++

)return sl->data;

}

最後寫main函式進行測試和實現

#include

#include

#define maxsize 10

#include

"singlelist.h"

slist* pslhead =

null

;slist* plist =

null

;int

main()

printf

("鍊錶長度:%d\n"

,lengthsinglelist

(pslhead));

printsinglelist

(pslhead)

;printf

("-----------------\n");

//刪除

//deletedatasinglelist(pslhead, 100);

//deletepossinglelist(pslhead,11);

//清空

//truncsinglelist(pslhead);

//修改數值

modifydatasinglelist

(pslhead,2,

20);printsinglelist

(pslhead)

;printf

("%d\n"

,getdatasinglelist

(pslhead,8)

);system

("pause");

}

function其實也沒有那麼難

function其實也沒有那麼難 1.最簡單的function函式,你想到了嗎?library plyr data iris head iris test1 1,function dat head test1 class test1 用subset實現也完全麼問題,但是就是輸出的結果形式不同 hea...

其實沒那麼難

近半年來,都一直想研究下hadoop和mahout的原始碼。但是,猶豫來猶豫去的都遲遲沒有動靜。眨眼睛畢業半年了,現在因公司業務需求,需要調研下資料探勘相關的技術。在工作的壓力下,開始慢慢的掀開hadoop和mahout等這些分布式開源軟體的原始碼的研究之路。其實,真的沒自己想象的那麼難。與其不斷的...

寫作其實沒有你想象的那麼難

從2009年正式開始寫作以來,寫作越來越多。文學作品 技術文章 思想感悟等都越來越多,質量也在不斷提高。最近,有強烈的寫作慾望,所以一不小心就寫了好多篇。五月以來,也開始寫作畢設了,今天又寫了一點。逐漸的形成了乙個結論。寫作其實沒有你想象的那麼難。認為寫作難,是因為根本就沒有想好。沒有乙個總體的想法...