單鏈表的基本操作大全之C語言實現

2021-12-29 19:55:08 字數 2177 閱讀 6132

鍊錶是通過一組任意的儲存單元來儲存線性表中的資料元素,這些儲存單元可以是連續的也可以是不連續的。為了建立起資料元素之間的關係,對於每個資料元素除了存放資料元素自身的資訊外,還必須有包含的指示該元素直接後繼元素儲存位置的資訊,這兩部分資訊組成乙個結點,即每個結點都有至少包括兩個域,乙個域儲存資料元素資訊,稱為資料域,另乙個域儲存直接後繼的位址,稱為指標域

typedef struct nodenode;當n個元素的線性表通過每個結點的指標域連線成了一條「鍊子」,我們形象的稱之為鍊錶。

建立單鏈表有兩種方法,一種是頭插法,一種是尾插法。

在主函式中呼叫函式時,使用乙個node *型別的指標接收函式的返回值。

每次malloc的結點都要初始化,因此寫成乙個函式。

//初始化乙個節點

node *initnode(node *pnode, int data)

在鍊錶的頭部插入結點建立單鏈表,稱為「頭插法」。

//建立乙個新節點(頭插法)

node *createlink_byhead(node *phead, int data)

else

return phead;

}因為每次新結點都會插在鍊錶的頭部,則資料讀入的順序和線性表中的邏輯順序正好相反。

在鍊錶的尾部插入結點建立單鏈表,簡稱」尾插法「。

//建立乙個鍊錶節點(尾插法)

node *createlink_bytail(node *phead, int data)

else

ptmp->next = pnode;

}return phead;

}尾插法讀入的資料與線性表中的邏輯順序相同

//求鍊錶長度

int linklen(node *phead)

return len;

}這個演算法的時間複雜度為o(n)

//按值查詢

node *searchnode(node *phead, int key)

while(ptmp->data != key && ptmp->next != null)

if(ptmp->data == key) //找到key,返回該結點位址

return ptmp;

if(ptmp->next == null)//沒找到,返回空

return null;

}這個演算法的時間複雜度為o(n)

插入操作也分為兩種,一種是插在目標值得前面,簡稱「前插法」,另一種是插在目標值的後面,簡稱「後插法」。

//向前插入

node *insertnode_bypre(node *phead, int data, int key)

else if(phead->data == key)else

if(null == ptmp->next)else

}return phead;

}前插法單獨處理了第乙個結點,是因為前插法會改變phead的值,而且前插法查詢目標結點必須知道目標節點的前驅結點的next值,所以從第二個結點開始處理。

//向後插入

node *insertnode_byback(node *phead, int data, int key)

if(null == ptmp->next)else

return phead;

}後插法要單獨處理尾結點的情況,因為插入操作不相同。

前插法和後插法的時間複雜度都為o(n)

//刪除節點

node *delnode(node *phead, int key)

else if(phead->data == key)else

if(null == ptmp->next)

if(ptmp->next->data == key)

}return phead;

}單獨處理第乙個結點還是因為要知道要刪除目標結點的前驅結點

刪除操作演算法時間複雜度為o(n)

鍊錶的倒置演算法思路:一次取出原煉表中的每乙個結點,將其作為第乙個結點插入新煉表中。

//鍊錶的倒置

node *reverselink(node *phead)

else

}return ptmp;

}//鍊錶排序(冒泡)

node *linksort(node *phead)}}

return phead;

}

單鏈表的基本操作(C語言實現)

單鏈表的初始化,建立,插入,查詢,刪除。include include typedef int elemtype 定義結點型別 typedef struct node node,linkedlist 單鏈表的初始化 linkedlist linkedlistinit 單鏈表的建立1,頭插法建立單鏈表...

C語言實現單鏈表的基本操作

listnode.h ifndef listnode h define listnode h include stdio.h include assert.h include stdlib.h typedef int datatype typedef unsigned int size t type...

單鏈表 的基本操作 c語言實現

鍊錶的基本操作 c語言實現 執行環境 dev c 5.11 以下為原始碼,如有不正確的地方歡迎指正!include include define false 0 define true 1 typedef int datatype typedef struct nodelinklist linkli...