(無頭)單鏈表的插,刪,查,改及相關測試用例

2021-08-14 07:50:59 字數 2488 閱讀 4495

slist.h

typedef int datatype;

typedef struct slistnode

slistnode;

slistnode* buyslistnode(datatype x);

void slistprint(slistnode* phead);

void slistpushback(slistnode** pphead, datatype x);

void slistpopback(slistnode** pphead);

void slistpushfront(slistnode** pphead, datatype x);

void slistpopfront(slistnode** pphead);

slistnode* slistfind(slistnode* phead, datatype x);

void slistinsert(slistnode** pphead, slistnode* pos, datatype x);

void slisterase(slistnode** phead,slistnode* pos);

//建立結點

slistnode* buyslistnode(datatype x)

//列印鍊錶

void slistprint(slistnode* phead)

printf("\n");

}//尾插

void slistpushback(slistnode** pphead, datatype x)

else

tail->_next = buyslistnode(x);}}

//尾刪

void slistpopback(slistnode** pphead)

else

if ((*pphead)->_next ==

null)// 乙個節點,直接刪除,如果略過此種情況,程式崩潰

//頭插

void slistpushfront(slistnode** pphead, datatype x)

else

//非空

}//頭刪

void slistpopfront(slistnode** pphead)

//乙個

else

if ((*pphead)->_next ==

null)

//乙個及以上

//查詢

slistnode* slistfind(slistnode* phead, datatype x)

cur = cur->_next;

}return

null;

}void test2()

//任意位置插入,在pos的前面插入

//任意位置刪除

void slisterase(slistnode** pphead, slistnode* pos)

else

prev->_next = pos->_next;

free(pos);//如果free(pos),會導致找不到pos的下一節點}}

無頭單鏈表的增刪查改

我們之前接觸過順序表 如果沒有了解的童鞋可以看看我的另一篇blog 資料結構 順序表 順序表的優點與缺點 我們知道順序表儲存資料可以很容易的對資料進行訪問 即隨機下標訪問 時間複雜度o 1 但是它也有自己的缺陷 比如在頻繁增刪的場景下時間複雜度很不友好o n 擴容時會導致空間的浪費等一系列問題。面對...

無頭單鏈表的增刪查的基本功能實現

slist.h pragma once include assert h include include typedef int sdatatype 節點結構 typedef struct slistnode node 給乙個鍊錶結構 typedef struct slist slist 鍊錶的初始...

資料結構 單鏈表的頭插法 尾插法建立及遍歷

頭插法和尾插法的區別 頭插法生成的鍊錶是逆序的,尾插法生成的鍊錶是順序的。時間複雜度和空間複雜度均是o n 建立結點類 class listnode 頭插法 頭插法原理 定義乙個head頭結點,之後新增元素在頭節點和已有元素之間。public listnode createlisthead head...