資料結構中,單向鍊錶(又名單鍊錶、線性鍊錶)是鍊錶的一種,其特點是鍊錶的鏈結方向是單向的,對鍊錶的訪問要通過從頭部開始,依序往下讀取。
下面的**是使用指標實現的乙個單鏈表,稱為動態單鏈表;當然,也可以使用陣列實現乙個單鏈表,為靜態單鏈表,後面學習之後,再用陣列實現單鏈表。
完整**如下:
一、定義標頭檔案: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...