資料結構 單鏈表的基本操作 C語言)

2021-08-12 00:13:40 字數 3552 閱讀 9241

單鏈表:一組任意儲存單元組成的線性表. 單鏈表這塊也沒有什麼難點,都是一些基本操作。但是應該注意以下幾點:

(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...