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...