單鏈表:一組任意儲存單元組成的線性表. 單鏈表這塊也沒有什麼難點,都是一些基本操作。但是應該注意以下幾點:
(1) :單鏈表一般附加頭結點,這樣做的好處是:初始化單鏈表後頭指標不需要再改動.
(2) :頭結點的資料域一般不儲存資料 或者 儲存標題,表長等資訊.
而單鏈表的儲存結構一般如下:
typedef int elemtype;
typedef struct node
lnode,*linklist;
下面,我們來看看每個部分函式實現:
1 - 單鏈表的建立:
單鏈表的建立可以使用:頭插法或尾插法。我一般使用尾插法,因為頭插法的資料與鍵盤輸入的順序相反,不習慣,因人而異吧.
a) : 頭插法建立單鏈表,**如下:
linklist creat_linklist_1() //頭插法建立單鏈表.
return h;
}
b) : 尾插法建立單鏈表,**如下:
linklist creat_linklist_2() //尾插法建立單鏈表.
return h;
}
2 - 計算單鏈表的表長:
通過計數器來統計單鏈表中的結點個數,設計思路也很簡單,**如下:
int length_linklist(linklist h) //計算表長.
return length;
}
3 - 按值查詢單鏈表的元素:
linklist locate_linklist(linklist h,elemtype x) //按值查詢值為x的值.
if(p->data == x) return p;
else return null;
}
4 - 按序號查詢單鏈表的元素並返回結點指標值:(返回指標值,後面可以用到)
linklist get_linklist(linklist h,int k) //按序號查詢第k個元素.
if(j == k ) return p;
else return null;
}
5 - 單鏈表的插入:
因為插入操作時,需要知道單鏈表插入位置的前乙個結點的資訊,所以利用上面的**,可以快速定位:
int insert_linklist(linklist h,int i,elemtype x) //插入資料.
else
}
6 - 單鏈表的刪除:
同理:單鏈表的刪除更需要知道前乙個結點的指標值,這樣可以實現快速定位:
int delete_linklist(linklist h,int i) //刪除單鏈表中第i位置的元素.
else
else
}}
7 - 單鏈表的逆置:
逆置的中心思想:先斷鏈,再頭插。具體思路:先讓h->next = null,然後將原來鍊錶的資料挨個頭插到頭結點之後,便完成單鏈表的逆置,**如下:
void reverse_linklist(linklist h) //逆置單鏈表.
}
8 - 單鏈表中刪除重複的值:(取重)
void pur_linklist(linklist h) //在單鏈表中刪除重複結點.
else q = q->next;
} p=p->next;
}}
#include #include #define error 0
#define true 1
typedef int elemtype;
typedef struct node
lnode,*linklist;
linklist creat_linklist_1(); //頭插法建立單鏈表.
linklist creat_linklist_2(); //尾插法建立單鏈表.
int length_linklist(linklist h); //計算表長.
linklist get_linklist(linklist h,int k); //按序號查詢第k個元素.
linklist locate_linklist(linklist h,elemtype x); //按值查詢值為x的值.
int insert_linklist(linklist h,int i,elemtype x); //插入資料.
int delete_linklist(linklist h,int i); //刪除單鏈表中第i位置的結點.
void reverse_linklist(linklist h); //逆置單鏈表.
void pur_linklist(linklist h); //在單鏈表中刪除重複結點.
void print_linklist(linklist h); //列印單鏈表.
int main()
linklist creat_linklist_1() //頭插法建立單鏈表.
return h;
}linklist creat_linklist_2() //尾插法建立單鏈表.
return h;
}int length_linklist(linklist h) //計算表長.
return length;
}linklist get_linklist(linklist h,int k) //按序號查詢第k個元素.
if(j == k ) return p;
else return null;
}linklist locate_linklist(linklist h,elemtype x) //按值查詢值為x的值.
if(p->data == x) return p;
else return null;
}int insert_linklist(linklist h,int i,elemtype x) //插入資料.
else }
void print_linklist(linklist h) //列印單鏈表.
printf("\n");
}int delete_linklist(linklist h,int i) //刪除單鏈表中第i位置的元素.
else
else }}
void reverse_linklist(linklist h) //逆置單鏈表.
}void pur_linklist(linklist h) //在單鏈表中刪除重複結點.
else q = q->next;
} p=p->next;
}}
小結:
單鏈表這邊的操作也不是很難,只要c語言指標的知識學的比較紮實。然後,也需要多加練習。
資料結構 單鏈表基本操作實現 C語言
個人複習過程中的回顧,有問題請與我交流。純c語言版,未用到c 的引用 單鏈表 含頭結點 include include define elemtype int typedef int elemtype typedef struct lnodelnode,linklist linklist creat...
資料結構單鏈表的基本操作(純c語言)
標頭檔案 ifndef slinklist h include include define eoe 1 typedef int elemtype typedef struct node node typedef node list list initilist list l list create...
資料結構 單鏈表基本操作
實現單鏈表的初始化,頭插法建表,尾插法建表,查詢元素,插入元素,刪除元素等功能 include using namespace std define elemtype char typedef struct node node,linklist 初始化單鏈表 void initlist linkli...