關於單鏈表的幾種操作實現

2021-06-18 03:50:25 字數 2286 閱讀 6943

注意:

1.只要涉及對鍊錶指標進行操作,一定要注意出錯/特殊情況的判斷(包括在函式的入口處、通過呼叫函式獲取結果時)否則極容易造成訪問越界

2. 鍊錶的刪除clearlist是否可以像陣列一樣一次性刪除一段連續空間?

不行,除非靜態鍊錶

#include using namespace std;

//定義乙個鍊錶結點

struct lnode

;//定義乙個鍊錶結構

struct linklist

;//初始化鍊錶

bool initlist(linklist *pthis)

//得到指定位置結點的指標

lnode *getnode(linklist *pthis, int position)

if(curpos != position)

return 0;

return ptmp;

}//插入結點

bool insertnode(linklist *pthis, int beforewhich, int ndata)

//返回當前鍊錶中的結點數

int getlength(linklist *pthis)

//得到指定位置結點的資料,結點從1索引到nlength

bool getnodedata(linklist *pthis, int position, int &ndata)//此處data用的是引用,

//將position指定的結點內的資料設定為newdata

//第乙個有效結點為1

bool setnodedata(linklist *pthis, int position, int ndata)

//將第乙個結點設定為當前結點

void rewind(linklist *pthis)

//取當前結點資料,並移動到下乙個結點

bool getnextnodedata(linklist *pthis, int *pdata)

//刪除乙個指定結點,結點位置由position指定

//position的值從1到nlength

//若煉表為空或者指定的結點不存在則返回false

bool deletenode(linklist *pthis, int position)

//定位與指定資料相等的資料結點,如果在當前鍊錶中已經存在該資料則返回該資料結點的位置

//若不存在這樣的點則返回0

int locateelem(linklist *pthis, int elem)

if(ptmp == null)

return 0;

return currentpos;

}//將鍊錶清空,釋放所有結點(不包括頭結點)

bool clearlist(linklist *pthis)

pthis -> nlength = 0;

return true;

}//銷毀鍊錶

bool destroylist(linklist *pthis)

//判讀鍊錶是否為空,若真返回true,假返回false

bool isempty(linklist *pthis)

int main()

if(setnodedata(&mylist, 3, 50))

else

rewind(&mylist);

while(getnextnodedata(&mylist, &datatmp))

cout << datatmp << endl;

if(deletenode(&mylist, 4))

else

int len2 = getlength(&mylist);

cout << len2 << endl;

for(int i = 1; i <= len2; ++i)

cout << locateelem(&mylist, 40) << endl;

deletenode(&mylist, locateelem(&mylist, 50));

deletenode(&mylist, locateelem(&mylist, 20));

rewind(&mylist);

while(getnextnodedata(&mylist, &datatmp))

cout << datatmp << endl;

clearlist(&mylist);

isempty(&mylist);

destroylist(&mylist);

return 0;

}

關於單鏈表

單鏈表結構體 typedef struct student node 建立單鏈表 node create else p head while cycle else head head next p next null printf n yyy d head data return head 單鏈表測...

關於單鏈表的逆序

昨天的課後習題出現了乙個單鏈表的逆序問題,作為乙個志在成為程式媛的我,寫了我人生中的第一篇部落格。題目要求是 逆轉鍊錶,並返回逆轉後的頭結點。我們先考慮一下對於鍊錶逆序時可能會出現的情況 對於乙個空鍊錶 很明顯沒有資料,沒有內容,不需要逆序,之前return 對於只有乙個節點的鍊錶我們也是不需要考慮...

關於單鏈表函式操作中return head的意義

頭指標就是指向鍊錶的首位址,返回首位址就可以對聯表進行相關操作,至於頭指標裡面有沒有值,看你自己放不放,無所謂的 返回了頭指標,就意味著返回了整個鍊錶,可以被其他地方使用了。頭指標一般資料域是沒值的,但是返回頭指標返回的是位址可不是資料域的值 單向鍊錶的頭指標永遠指向鍊錶的第乙個元素,不能指向其它的...