鍊錶之單向有頭不迴圈鍊錶

2021-08-20 11:37:14 字數 2289 閱讀 2949

typedef

struct listnode

listnode;

下面就是一些構造鍊錶的一些 函式,包括刪除,插入,銷毀等:

建立乙個節點

listnode* buynode(typedate x)

頭插:就是從頭節點處 插入乙個節點:

void slistpushfront(listnode** pphead, typedate x)//頭插

else

}

尾插 :

對於單向有頭不迴圈鍊錶而言:需要找到鍊錶中的最後乙個節點,再將需要插入的節點插入:

void slistpushback(listnode** pphead, typedate x)//尾插

else

cur = cur->pnext;}}

}

void slistpopfront(listnode** pphead)//頭刪

else

}

void slistpopback(listnode** pphead)//尾刪

else

cur = cur->pnext;}}

}

刪除任意乙個節點:

void slisterase(listnode** pphead, listnode* pposnode)//在任意位置刪除

else

pnode->pnext = pposnode->pnext;

free(pposnode);}}

在任意位置插入乙個節點:

void slistinsert(listnode** pphead, listnode* pposnode, typedate x)//在任意位置插入

if (*pphead == pposnode)

else

newnode->pnext = pposnode;

pnode->pnext = newnode;}}

按值刪除(刪除遇到的第乙個 ):

如果鍊錶為空,則返回空,若不是空鍊錶,則遍歷整個鍊錶 ,比較節點的值是否與所需要刪除的節點的值是一樣的,如果是一樣的就刪除這個節點,然後退出。如果沒有與其匹配的,就返回空。

void slistremove(listnode** pphead, typedate x)//按值刪除,刪除遇到的第乙個

else

cur = pnode->pnext;

pnode->pnext = cur->pnext;

free(cur);}}

按值刪除(刪除鍊錶中為這個值得所有節點):

思想:遍歷整個鍊錶,當找到資料相同的節點,刪除這個節點後,並不退出,要將當前節點賦給下乙個節點,仔計算查詢。

核心:要將當前節點用乙個臨時節點代替,否則,找到了需要刪除了的節點後,會將這個節點釋放那麼再使用這個節點將會產生錯誤。

void slistremoveall(listnode** pphead, typedate x)//按值刪除,刪除所有的

else

else}}

}

銷毀鍊錶:

思想:遍歷整個鍊錶,將鍊錶的,從頭節點開始釋放,直至鍊錶為空。

void slistdestory(listnode** pphead)

pphead=null;

}

測試**:

void test()

程式的結果是:

單向有頭不迴圈鍊錶

鍊錶是一種常見的基礎資料結構,是一種線性表,是一種物理儲存單元上非連續 非順序的儲存結構。鍊錶由一系列結點 鍊錶中每乙個元素稱為結點 組成,結點可以在執行時動態生成。每個結點包括儲存資料元素的資料域和儲存下乙個結點位址的指標域兩個部分。相比於線性表順序結構,操作複雜。資料元素的邏輯順序也是通過鍊錶中...

單向不迴圈鍊錶

linkedlist主要類 class linkednode public class linkedlist node.next head this.head node return 尾插 public void addlast int elem linkednode cur this.head 迴...

鍊錶之雙向有頭迴圈鍊錶

雙向有頭迴圈鍊錶的結構體只是增加了乙個前乙個節點 typedef struct slistnode slistnode 當鍊表為空是,還是有乙個節點 那就是頭節點,此時 當鍊表不為空時 雙向鍊錶的初始化 一定要注意,鍊錶的初始化,相當於要初始化乙個節點,使它的next指向自己。它的prev也指向自己...