定义一个结构体:
typedef struct stu { char num[10]; char name[12]; float score; struct stu *next; }STU;
创建链表函数:
STU *create_link(STU *head,STU *p_new) { STU *p_mov=head; if(head==NULL) { head=p_new; p_new->next=NULL; } else { while(p_mov->next!=NULL) p_mov=p_mov->next; p_mov->next=p_new; p_new->next=NULL; } return head; }
遍历链表函数:
void print_link(STU *head) { STU *p_mov=head; if(head==NULL) printf("链表为空!\n"); else { while(p_mov!=NULL) { printf("\t%-5s %-6s %4.1f\n",p_mov->num,p_mov->name,p_mov->score); p_mov=p_mov->next; } } }
链表查找函数:
void find_link(STU *head,char *name) { int flag=1; STU *p_mov=head; if(head==NULL) printf("链表为空!\n"); else { while(p_mov!=NULL) { if(!strcmp(p_mov->name,name)) { printf(" %s %s %.1f\n",p_mov->num,p_mov->name,p_mov->score); flag=0; } p_mov=p_mov->next; } if(flag) printf("没有找到信息!\n"); } }
删除链表节点函数:
STU *delete_link(STU *head,char *name) { int flag=0; STU *p_mov=head,*p_front=head; if(head==NULL) printf("链表为空!\n"); else { while(p_mov!=NULL) { if(!strcmp(p_mv->name,name)) { flag=1; break; } p_front=p_mov;//把要删除的节点前一个节点缓存一下 p_mov=p_mov->next; } if(flag) { if(p_mov==head) head=p_mov->next; else p_front->next=p_mov->next;//把删除的节点的前一个节点指向后一个节点 free(p_mov); } else printf("没有找到信息!\n"); } return head; }
插入链表节点函数:
STU *insert_link(STU *head,STU *p_in) { STU *p_mov=head,*p_front=NULL; if(head==NULL) printf("链表为空!\n"); else { while(strcmp(p_in->num,p_mov->num)==1&&p_mov->next!=NULL) { p_front=p_mov; p_mov=p_mov->next; } if(strcmp(p_in->num,p_mov->num)!=1) { if(head==p_mov)//在链表头部插入 { p_in->next=head; head=p_in; } else //在链表中间插入 { p_front->next=p_in; p_in->next=p_mov; } } else //在链表末尾插入 { p_mov->next=p_in; p_in->next=NULL; } } return head; }
释放链表函数:
STU *free_link(STU *head) { STU *p_mov=head,*p_temp=NULL; if(head==NULL) printf("链表为空!\n"); else { while(p_mov!=NULL) { p_temp=p_mov->next; //先存放到别的地方 free(p_mov); p_mov=p_temp; // 释放后再还回来 } } return NULL; }
链表排序函数:
STU *sort_link(STU *head) { STU temp; STU *p_mov=head,*p_front=head; if(head==NULL) printf("链表为空!\n"); else { while(p_front!=NULL) { p_mov=p_front->next; while(p_mov!=NULL) { if(p_mov->score<p_front->score) { //把结构体所有成员进行交换 temp=*p_mov; *p_mov=*p_front; *p_front=temp; //把指针域再交换回来 temp.next=p_mov->next; p_mov->next=p_front->next; p_front->next=temp.next; } p_mov=p_mov->next; } p_front=p_front->next; } } return head; }