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

2021-09-03 01:11:42 字數 3067 閱讀 9928

資料結構中,單向鍊錶(又名單鍊錶、線性鍊錶)是鍊錶的一種,其特點是鍊錶的鏈結方向是單向的,對鍊錶的訪問要通過從頭部開始,依序往下讀取。

下面的**是使用指標實現的乙個單鏈表,稱為動態單鏈表;當然,也可以使用陣列實現乙個單鏈表,為靜態單鏈表,後面學習之後,再用陣列實現單鏈表。

完整**如下:

一、定義標頭檔案:list.h

#ifndef list_h_included

#define list_h_included

struct node;

typedef struct node *ptrtonode;

typedef ptrtonode list;

typedef ptrtonode position;

list makeempty(list l); //生成空鍊錶l

void destroylist(list l); //銷毀鍊錶l

_bool isempty(list l); //判定鍊錶是否為空

_bool islast(position p, list l); //判定位置p的節點是否為尾結點

int length(list l); //檢視鍊錶長度

position find(int x, list l); //在鍊錶l中查詢資料項為x的第乙個結點

void delete(int x, list l); //在鍊錶l中刪除資料項為x的第乙個結點

position findprevious(int x, list l); //在鍊錶l中查詢資料項為x的第乙個結點的前驅位置

position findnext(int x,list l); //在鍊錶l中查詢資料項為x的第乙個結點的後繼位置

void insert(int x, list l, position p); //在鍊錶l中p位置插入資料項為x的結點

void deletelist(list l); //刪除鍊錶l頭結點外的所有結點

position header(list l); //獲得鍊錶l中頭結點位置

position first(list l); //獲得鍊錶l中第乙個資料結點的位置

position advance(position p); //獲得p位置的後繼結點位置

int retrieve(position p); //獲取p位置結點的資料項

struct node

;#endif // list_h_included

二、各個函式的實現: list.c

#include "list.h"

#include #include #include/*初始化:建立乙個空的單鏈表*/

list makeempty(list l)

l->data = 0; //無效值,不賦值的話就是隨機值

l->next = null;

return l;

}/*銷毀鍊錶l*/

void destroylist(list l)

}/*測試空表*/

_bool isempty(list l)

/*測試是否為尾節點*/

_bool islast(position p, list l)

/*返回鍊錶長度*/

int length(list l)

return length;

}/*查詢給定元素在表中的位置*/

position find(int x, list l)

return p; //return position of x in l; null if not found

}/*刪除表中某個元素x*/

void delete(int x, list l)

}/*查詢表元x的前驅*/

position findprevious(int x, list l)

return p;

}/*查詢表元x的後繼*/

position findnext(int x,list l)

p = p->next; //此時p即為x所在結點位置,p重新賦值為p的下乙個即後繼結點

return p;

}/*向表l中p位置之後插入元素*/

void insert(int x, list l, position p)

temp->data = x;

temp->next = p->next;

p->next = temp;

}/*清空鍊錶l*/

void deletelist(list l)

l->next = null; //保留頭結點

}/*獲取位置p後繼結點的位置*/

position advance(position p)

return p;

}/*獲取位置為p的結點的資料項*/

int retrieve(position p)

/*獲取鍊錶l第乙個結點的位置*/

position first(list l)

/*獲取鍊錶l頭結點位置*/

position header(list l)

三、main函式測試 : main.c

#include "list.h"

#include #include int main(void)

printf("鍊錶長度為%d\n", length(list));

p = findnext(5, list);

printf("資料項為5的結點的後繼結點資料項為%d \n", retrieve(p));

delete(10, list);

p = findnext(5, list);

printf("資料項為5的結點的後繼結點資料項為%d \n", retrieve(p));

p = first(list);

printf("第乙個結點資料項為%d\n", retrieve(p));

printf("頭結點位置為%p\n", header(list));

return 0;

}

單鏈表的基本操作(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...