/**建立乙個鍊錶每個結點包括學號、姓名、性別、年齡。*包括增刪改查,排序 交換 反轉等功能* */
以下是建立在乙個學生結構體上的單鏈表
以及單鏈表各種功能
#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...