(二)链表学习之模块化处理
动态链表
- 1.动态链表概念
- 2.动态链表操作接口
- 2.0数据结构定义
- 2.1添加节点
- 2.2显示节点数据
- 2.3逆转节点
- 2.4查找节点
- 2.5查找并修改节点数据
- 2.6获取节点个数
- 2.7删除所有节点
- 2.7删除指定节点
- 2.8根据节点,头部插入
- 2.8根据节点,尾部插入
- 2.9节点排序
- 2.10主程序
1.动态链表概念
动态链表就是由malloc
分配内存
2.动态链表操作接口
2.0数据结构定义
struct Student {int num;//编号float score;//成绩struct Student* next;//存储下一个节点的地址
};
typedef struct Student ST;
2.1添加节点
void add(ST** phead, int inum, float iscore)//传入头节点的地址,插入数据
{if (*phead == NULL)//判断链表是否为空{ST* newnode = malloc(sizeof(ST));//c99可以不强转malloc返回值if (newnode == NULL){printf("内存分配失败");return;}newnode->num = inum; //节点初始化newnode->score = iscore;newnode->next = NULL;*phead = newnode;//让头指针指向这个节点}else{ST* p = *phead;while (p->next != NULL)//遍历到最后1个节点,尾部插入{p = p->next;}ST* newnode = malloc(sizeof(ST));if (newnode == NULL){printf("内存分配失败");return;}newnode->num = inum; //节点初始化newnode->score = iscore;newnode->next = NULL;p->next = newnode;//让头指针指向这个节点}
}
2.2显示节点数据
void showall(ST* phead)//传入头节点,显示所有数据
{ST* head = phead;while (head != NULL){printf("num=%d,score=%f", head->num, head->score);//访问数据printf("%p,%p\n", head, head->next);//打印两个节点的地址head = head->next;}
}
2.3逆转节点
ST* rev(ST* head)//逆转
{ST* p1, * p2, * p3;p1 = p2 = p3 = NULL;if (head == NULL || head->next == NULL)//为空链表或者只有1个元素{return head;//返回头节点}p1 = head;p2 = head->next;while (p2!=NULL){p3 = p2->next;//布局三个节点p2->next = p1;//指向前一个节点p1 = p2;//指针向前移动,从第二个到最后一个节点p2 = p3;}head->next = NULL;head = p1;return head;
}
2.4查找节点
ST* search(ST* head, int num)//根据编号查找节点
{while (head != NULL){if (num == head->num){return head;//返回当前节点的指针地址}head = head->next;}return NULL;
}
2.5查找并修改节点数据
void change(ST* head, int oldnum, int newnum)//查找oldnum修改为newnum
{ST* psearch = search(head, oldnum);if (psearch == NULL){printf("没找到");}else{psearch->num = newnum;printf("修改成功");}
}
2.6获取节点个数
int getnum(ST* head)//获取节点个数
{int i = 0;while (head != NULL){i++;head = head->next;}return i;
}
2.7删除所有节点
void *freeall(ST* head)//删除所有节点.每次删除第一个节点后面的一个节点,最后删除头节点
{ST* p1, * p2;p1 = p2 = NULL;p1 = head;//头节点while (p1->next!=NULL)//遍历所有节点{p2 = p1->next;//p2为p1下个节点p1->next = p2->next;//p1存储了p2下一个节点的地址//p1->next = p2->next;//p1存储了p2下一个节点的地址//p2 = p1->next;//p2为p1下个节点free(p2);printf("\n\n\n");//访问数据,观测删除过程showall(head);}free(head);return NULL;
}
2.7删除指定节点
ST* delete(ST *head ,int num)//返回头节点,传入头节点,要删除节点的编号
{ST* p1, * p2;p1 = p2 = NULL;p1 = head;//头节点while (p1 != NULL){if (p1->num == num){break;}else{p2 = p1;//记录当前节点p1 = p1->next;}}if (p1 == head){head = p1->next;free(p1);}else {p2->next = p1->next;free(p1);}return head;
}
2.8根据节点,头部插入
ST* HeadInsert(ST* head, int num, int inum, float iscore)//根据节点,头部插入
{ST* p1, * p2;p1 = p2 = NULL;//定义两空节点p1 = head;while (p1 != NULL){if (p1->num == num){break;}else{p2 = p1;//记录当前节点p1 = p1->next;//循环到下一个节点}}if (head == p1)//头节点{ST* newnode = (ST *)malloc(sizeof(ST));newnode->num = inum;newnode->score = iscore;newnode->next = head;//指向第一个节点head = newnode;//newnode成为第一个节点}else{ST* newnode = (ST*)malloc(sizeof(ST));newnode->num = inum;newnode->score = iscore;newnode->next = p1;//新节点指向p1p2->next = newnode;//指向新节点}return head;
}
2.8根据节点,尾部插入
ST* BackInsert(ST* head, int num, int inum, float iscore)//根据节点,尾部插入
{ST* p1, * p2;p1 = p2 = NULL;//定义两空节点p1 = head;while (p1 != NULL){if (p1->num == num){break;}else{//p2 = p1;//记录当前节点p1 = p1->next;//循环到下一个节点}}if (p1->next == NULL)//最后一个节点{ST* newnode = (ST*)malloc(sizeof(ST));newnode->num = inum;newnode->score = iscore;newnode->next = NULL;p1->next = newnode;}else{p2 = p1->next;//记录下一个节点的位置ST* newnode = (ST*)malloc(sizeof(ST));newnode->num = inum;newnode->score = iscore;newnode->next = p2;//链接下一个节点p1->next = newnode;//p1指向新节点}return head;//无意义
}
2.9节点排序
void sort(ST* head,char ch)//当ch为大于号则从大到小排序,冒泡排序
{if (ch == '>'){for (ST* p1 = head; p1 != NULL; p1 = p1->next){for (ST* p2 = head; p2 != NULL; p2 = p2->next){if (p1->num < p2->num){ST temp;temp.num = p1->num;p1->num = p2->num;p2->num = temp.num;//再交换score}}}}else if (ch == '<'){}}
2.10主程序
int main()
{struct Student* head = NULL;//头指针,指向节点,从而访问节点add(&head, 1, 70);add(&head, 2, 80);add(&head, 3, 90);add(&head, 4, 91);add(&head, 5, 92);//printf("%d,%f\n", head->num, head->score);//访问数据//printf("%d,%f\n", head->next->num, head->next->score);//printf("%d,%f\n", head->next->next->num, head->next->next->score);head = rev(head);showall(head);//head= freeall(head);//head = NULL;//删除头节点务必让他为空showall(head);system("pause");return 0;
}
(二)链表学习之模块化处理相关推荐
- 20145240《信息安全系统设计基础》第十二周学习总结
20145240<信息安全系统设计基础>第十二周学习总结 前三周博客链接 第九周学习总结 第十周学习总结 第十一周学习总结 视频学习内容总结 指针数组与数组指针 数组指针(也称行指针) 定 ...
- 20145206 《信息安全系统设计基础》第十二周学习总结
20145206 <信息安全系统设计基础>第十二周学习总结 本周学习目标 1.第九周代码检查 2.第十周代码检查 3.第十一周代码检查 博客链接 20145206 <信息安全系统设计 ...
- linux词语大全,简单词语大全二字学习软件-简单词语大全四字下载v1.5.3-Linux公社...
简单词语大全二字学习软件是一款可以让用户快速背单词的软件,这款软件为用户提供了英语内容搭配影音的例句,让用户可以轻松学习英语.其中,用户可以在简单词语大全二字学习软件上对多人进行挑战,看自己的英语水平 ...
- GoLang之map底层系列二(浅显学习)
文章目录 GoLang之map底层系列二(浅显学习) 1.map++ 2.map引用传递 3.map不是并发安全 4.map的value为空接口 5.map的value为切片 6.value,ok=m ...
- [软考]系统架构设计师 备考经验分享(二) - 知识点学习+综合知识篇
2021.12.20 更新下成绩 49,53,55 原文: 本篇对应备考计划中的1.2阶段: 相关分享: 备考计划篇:[软考]系统架构设计师 备考经验分享(一) - 备考计划篇 知识点学习+综合知识篇 ...
- 计算机系大二学期计划范文,大二学期学习计划范文
大二学期学习计划范文 大学二年级是大学生在适应大学生活后,正式进入大学自主学习.生活阶段的初始期.下面是小编整理的大二学期学习计划范文,希望能够为大家提供帮助! 大二学期学习计划范文一 过去的一学期, ...
- 计算机系大二学期计划范文,大二学期学习计划范文6篇
大学二年级是大学生在适应大学生活后,正式进入大学自主学习.生活阶段的初始期.本文是大二学期的学习计划范文,仅供参考. 大二学期学习计划范文一 过去的一学期,是辛苦的但又是充满意义的.不知不觉,已经加入 ...
- 深度强化学习笔记(二)——Q-learning学习与二维寻路demo实现
深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 文章目录 深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 前言 理论 什么是Q-Learning 算 ...
- 工程伦理第十二章学习笔记2020最新
工程伦理第十二章学习笔记2020最新 继续更新
最新文章
- python3网络编程中semaphore用法_python3 进程信号量semaphore
- 业余实现一个统计A股数据工具
- linux6安装图形化界面,centos 6.8 图形界面安装
- Anaconda创建跟别人环境配置一样的虚拟环境(coda env creat -f environment.yml)
- SQL约束脚本的用法
- 华为数据之道_DT|华为数据之道,怕你学不会,这次干脆出了本书
- 篮球计时计分器c语言程序,篮球赛计时计分器程序源代码.doc
- feignclient time out
- android手机截图功能,安卓手机怎么截屏?三星/华为/小米等手机截图方法
- C 语言实现简易区块链
- 毕得医药递交科创板注册:年营收6亿 拟募资4.34亿
- spring获取Bean报错
- ZZULIOJ:1134: 字符串转换
- qlikview连接数据库
- 虚拟现实和增强现实技术_增强现实和虚拟现实在NBA中的作用
- 2018年1月9日的工作总结
- com.android.gms是什么,com.google.android.gms.cast的用途是什么?
- 基于STM32F1-C8T6无人机(二)——舵机/电调/空心杯电机/飞控/机架/subs接收机/充电器和电池(给出链接和思考)
- 蔡徐坤游戏HTML,JS制作蔡徐坤打篮球小游戏(鸡你太美?)
- 关于AttributeError: module ‘tensorflow‘ has no attribute ‘io‘解决方案
热门文章
- 陆金所机房一键切换平台建设
- 毕业设计 单片机智能手环计步器 - 嵌入式 物联网 stm32
- htmlspecialchars详解
- Unity 相机围绕着目标点旋转、缩放
- xls导入mysql heidisql_HeidiSQL 导入Excel数据
- 最全的Apache Doris教程(收藏版)共9万+字【第一篇】由于是typora编写,有部分图片在本地,识别不出来,请细聊我
- 【内网学习笔记】20、Hashcat 的使用
- 项目整合管理——项目管理信息系统(新年快乐)
- 东南大学计算机2020初试成绩公布,东南大学2020初试考研录取分数线名单
- ROS(四)参数服务器C++实现