单向链表操作函数

来源:互联网 发布:重庆 外卖 大数据 编辑:程序博客网 时间:2024/05/18 03:36

定义一个结构体:

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;elsep_front->next=p_mov->next;//把删除的节点的前一个节点指向后一个节点free(p_mov);}                                         elseprintf("没有找到信息!\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;}



 

0 0
原创粉丝点击