单向链表操作函数
来源:互联网 发布:重庆 外卖 大数据 编辑:程序博客网 时间: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
- 单向链表操作函数
- 单向链表操作
- 单向链表操作
- 单向链表操作
- C++写的单向链表List操作函数
- C写的单向链表List操作函数
- 单向链表的操作
- 单向链表删除操作
- 单向链表的操作
- 单向链表相关操作
- 单向链表相关操作
- 单向链表的操作
- 单向链表的操作
- 单向链表的操作
- 单向链表操作总结
- 单向链表的操作
- 单向链表的操作
- 单向链表的操作
- IOS UIScrollView 说明 和 UIScrollViewDelegate详解
- Text Justification
- 双目视觉嵌入式移植成功
- 文本输入控件wx.TextCtrl
- SQL点滴21—几个有点偏的语句
- 单向链表操作函数
- ORA-12514(TNS:监听程序当前无法识别...)的解决方案
- android listview addHeaderView和addFooterView详解
- c++智能指针的实现
- CentOS中设置系统级代理
- 最大和子数组 && 最大有序子数组
- SQL点滴22—性能优化没有那么神秘
- Android中的Eclipse的快捷键
- JS中call和apply方法的区别