C语言实现链表
第一步创建需要的结构体
typedef struct{
int id;
int myData;
}dataSet;
typedef struct myList{
dataSet node;
struct myList *next;
}myList;
myList *id_data_myList_head = NULL;
第二步完成 插入链表(尾插入链表)函数
在插入链表之前,先判断表里是否有相同的ID,有就不插入,没有就插入到表里。这里用find函数实现判断。
int find(int id)
{
if (id_data_myList_head == NULL) return 0;
else{
myList *tmep = id_data_myList_head;
while(tmep){
if(tmep->node.id == id){
return 1;
}
else{
tmep = tmep->next;
}
}
return 0;
}
}
void insert(int id, int myData)
{
if(find(id)) return;
else{
if(id_data_myList_head == NULL){
id_data_myList_head = malloc(sizeof(myList));
id_data_myList_head->node.id = id;
id_data_myList_head->node.myData = myData;
id_data_myList_head->next = NULL;
return;
}
else{
myList *tail = id_data_myList_head;
while(tail){
tail = tail->next;
}
tail = malloc(sizeof(myList));
tail->node.id = id;
tail->node.myData = myData;
tail->next = NULL;
}
}
return;
}
初始化链表
int init(int max){
int i;
for(i = 0;i < max;i++){
insert(i,i);
}
}
打印链表
定义一个指针,指向全局head的链表;
void print_list()
{
myList *tmep;
tmep = id_data_myList_head;
while(tmep){
printf("id:%d myData:%d",tmep->node.id,tmep->node.myData);
tmep = tmep->next;
}
return;
}
删除一个结点
实现思路 找到对应id的结点,然后就free,其中需要判断是否是头结点
void delete_node(int id)
{
myList *tmep;
myList *p;
tmep = id_data_myList_head;
p = tmep;
if(tmep->node.id == id){
id_data_myList_head = p->next;
return;
}
while(p){
if(p->next != NULL){
if(p->node.id == id){
tmep->next = p->next;
free(p);
return;
}
else{
tmep->next = p;
p = p->next;
}
}
else{
if(p->node.id == id){
tmep->next = NULL;
free(p);
return;
}
else break;
}
}
return 0;
}