c語言實現單鏈表

2021-08-09 04:29:52 字數 3629 閱讀 6532

/**建立乙個鍊錶每個結點包括學號、姓名、性別、年齡。*包括增刪改查,排序 交換 反轉等功能* */

以下是建立在乙個學生結構體上的單鏈表

以及單鏈表各種功能

#include#include#includetypedef struct node

node;

void print(node *head);     //列印

void createnode(node **p, int no, int age, char ****, char *name);//建立節點

void add(node **head, int no, int age, char ****, char *name);    //新增節點

node *findnode(node *head, int no);         //根據學號找節點, 沒有返回null

node *prvnode(node *head, node *find);      //找到前驅節點

void serchnode(node *head, int no);         //按學號查詢資訊

void insert(node **head);                   //按學號大小有序插入

void headinsert(node **head, int sid);      //某個節點前插入(包括頭插)

void backinsert(node **head, int sid);      //某個節點後插入(包括尾插)

void deletenode(node **head, int no);       //刪除學號為no的節點

void freeall(node **head);                  //銷毀鍊錶

void swap(node **head, int no1, int no2);   //交換兩個節點的順序 

void swapsort(node **head, node *p1, node *p2);  //專門用來排序的交換函式 - -

void sort(node **head);                     //鍊錶排序

void linkrev(node **head);                  //鍊錶的反轉

int gettoatalnode(node *head);              //獲取節點總數

函式的實現部分

void print(node *head)

}else

}void createnode(node **p, int no, int age, char ****, char *name)

else

}//為空建立新增節點,, 不為空尾部插入...

void add(node **head, int no, int age, char ****, char *name)

else

createnode(&p, no, age, ***, name);

h->next = p;

}}//根據學號找到其節點

//沒找到返回null

node *findnode(node *head, int no)

head = head->next;

}if(flag == 0)

return head;

}//找到前驅節點

node *prvnode(node *head, node *find)

if(head->next == find)

head = head->next;

}return head;

}//有序插入  按學號由小到大

void insert(node **head)

if(p1 == *head)             //頭部插入

else if(p1 == null)         //尾部插入

else                        //中間插入

}void headinsert(node **head, int sid)      //某個節點前插入(包括頭插)

else                        //中間插入

}void backinsert(node **head, int sid)       //某個節點後插入(包括尾插)

else                        //中間插入

}//學號為no的成員刪除

void deletenode(node **head, int no)

p2 = p1;

p1 = p1->next;

}if(p1 == *head)          //刪除頭節點

else                     //刪除其他節點

/* 或者這樣

* if(head!= null)

else   //刪除的不是首元素

p1 = p2;

p2 = p1->next;}}

}else

*/}void serchnode(node *head, int no)            //按學號查詢資訊

else

}//刪除所有節點

//最後刪除頭節點

void freeall(node **head)

free(*head);

*head = null;

}//交換鍊錶中兩個節點的順序

//頭節點的, 尾節點,  中間相鄰節點, 不相鄰節點等特殊節點的交換處理

void swap(node **head, int no1, int no2)

else if(p2 == *head)

else                //不帶頭節點的交換

node *q = p1->next;

p1->next = p2->next;

p2->next = q;

}else

}//用來排序的交換函式

void swapsort(node **head, node *p1, node *p2)

//鍊錶排序

void sort(node **head)

p2 = p2->next;

}p1 = p1->next;

}}//鍊錶的逆轉

void linkrev(node **head)

node *p1, *p2, *p3;

p1 = p2 = p3 = null;

p1 = *head;

p2 = p1->next;

while(p2)

(*head)->next = null;    //不加這條語句, 將會在1,2節點之間來回跳

*head = p1;        //指向最後乙個節點

}int gettoatalnode(node *head)              //獲取節點總數

}return num;

}

測試**部分

int main()

若有錯誤,歡迎指出。共同進步。

c語言實現單鏈表

一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...

C語言實現單鏈表

單鏈表可以說是基礎,有利於對指標的使用 結點 typedef int datatype typedef struct slistnode slistnode 實現的函式的宣告如下 slistnode buynode datatype x void printslist slistnode phead...

C語言實現單鏈表

dev c 編譯執行通過,實現了單鏈表的構建,清空,插入,刪除和查詢。include include include include include define ok 1 define error 0 typedef int elemtype typedef struct node node ty...