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