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