網上看了好多的單鏈表的**,有些寫的很好,有些寫的異常判斷稍微少了些,有些寫的不太符合自己的想法,所以自己也來整理一下,哈哈
參加工作也有段時間了,對於帶結點的單鏈表操作倒是沒有怎麼用過,畢竟都是呼叫的公司的庫函式,
最近一段時間想回來再看看c語言基礎,發現真的不怎麼樣,唉。下面是自己寫的,可能也有不少問題,各位看官提提意見。
#include "stdio.h"
#include
typedef struct student
t_link_node;
// 建立鍊錶 帶頭結點
t_link_node *create_link(void)
p->data = input;
end->next = p;
end = p;
} else
}end->next = null;//結束建立
return head;
}//.清除線性表中的所有元素,即釋放所有節點(除了頭結點),使之成為乙個空表
void list_destroy(t_link_node *head)
p = head->next;
while (p != null)
head->next = null;
printf("清空鍊錶,保留頭結點\n");
}//鍊錶的長度
int link_length(t_link_node *head)
p = head->next;
while (p)
return (len);
}//列印鍊錶節點
void link_print(t_link_node *head)
printf("\n");
if (0 == link_length(head))
p = head->next;
while (p)
}// 刪除乙個節點
int link_del(t_link_node *head,int num)//刪除乙個節點
p_list_del = head->next;
p2 = head;
while(p_list_del != null && p_list_del->data != num)
if(null == p_list_del)
p2->next = p_list_del->next;
free(p_list_del);
return 1;
}// 鍊錶的選擇排序法
int link_sort(t_link_node *head)
printf("\n*******link_sort ***********\n");
//****** select sort
//for (i=0;inext; p1->next;p1=p1->next)
}//if (smaller != i)
if (p1 != p_smaller)
}return 1;
}// 鍊錶的向頭部插入乙個節點
int link_insert_head(t_link_node *head, int num)
printf("\n*******link_inserthead ***********\n");
if (p_new = (t_link_node *)malloc(sizeof(t_link_node)))
return 1;
}// 鍊錶的向尾部插入乙個節點
int link_insert_tail(t_link_node *head, int num)
printf("\n*******link_inserttail ***********\n");
p1 = head;
//一直到結尾為止,這樣寫法可以少乙個中間變數
//不然要寫成
//p1 = head->next;
//while (p1)
////後面就用p_last來表示最後乙個節點
////而目前做法是p1=head,然後再p1->next就可以用p1來表示最後乙個節點
//while (p1->next != null)
if (p_new = (t_link_node *)malloc(sizeof(t_link_node)))
return 1;
}// 鍊錶的按照順序進行插入結點
int link_insert_sequence(t_link_node *head, int num)
printf("\n*******link_insertsequence ***********\n");
p1 = head->next;
p2 = head;
while (p1 != null && p1->data < num)
if (p_new = (t_link_node *)malloc(sizeof(t_link_node)))
return 1;
}// 鍊錶的逆置
void link_reverse(t_link_node *head)
p= head->next;
head->next = null;
printf("\n*******start link_reverse...****\n");
while (p)
}// 測試函式
void main(void)
帶頭結點單鏈表的基本操作
單鏈表 include includetypedef int elemtype typedef struct lnodelnode,linklist bool initlist linklist l 初始化單鏈表 linklist head insertlist linklist l 頭插法建立單鏈...
單鏈表的基本操作(不帶頭結點)
node.h ifndef node h define node h 不帶頭結點的單鏈表 typedef struct node node,pnode endif node hlist.h ifndef list h define list h include node.h 頭插 void inse...
單鏈表的建立(帶頭結點以及不帶頭結點)
include stdio.h include stdlib.h typedef struct list list list headcreatlist 頭插法建立鍊錶,不帶頭結點 return head list tailcreatlist 尾插法建立鍊錶,不帶頭結點 r next s 將l指向的...