單鏈表比較靜態鍊錶更加靈活,長度可變,刪除便捷,唯一較單鏈表費時就是查詢,不能下標查詢。但是總體上比靜態鍊錶有了質的飛躍。
單鏈表最核心的就是指標的靈活使用,以及對較為特殊結構的理解。
結構中最後的指標指向同結構的下個元素,這個指標就像鍊子一樣,乙個接乙個把資料串起來。
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年正式開始寫作以來,寫作越來越多。文學作品 技術文章 思想感悟等都越來越多,質量也在不斷提高。最近,有強烈的寫作慾望,所以一不小心就寫了好多篇。五月以來,也開始寫作畢設了,今天又寫了一點。逐漸的形成了乙個結論。寫作其實沒有你想象的那麼難。認為寫作難,是因為根本就沒有想好。沒有乙個總體的想法...