结构体和链表
Posted 信管1711陈冰艳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体和链表相关的知识,希望对你有一定的参考价值。
结构体
一、PTA实验作业
题目1:7-2 通讯录排序
1. 本题PTA提交列表
2. 设计思路
将每个人的信息先录入到结构体数组中,再将每个人的年龄拿出来比较,可选用选择排序法将朋友信息重新排序,最后实现按照年龄从大到小输出朋友的信息。
3.本题调试过程碰到问题及PTA提交列表情况说明
错误原因:选择排序法使用错误,正确的做法应该是先找出出生日期最小值(即年龄最大)所在的数组下标,再调换位置,而不是直接将数组替换过去。
4.代码截图
题目2:7-3 找出总分最高的学生
1. 本题PTA提交列表
2. 设计思路
运用结构体先输入第一个学生的成绩,计算他的总分并将这个学生记做成绩最高的学生max。接着依次输入n-1个学生成绩,逐个计算总分并与max所在的学生总分相比,若高于max,将这个学生记做max,直到判断完成,输出max所在学生信息。
3.本题调试过程碰到问题及PTA提交列表情况说明
错误原因:给num数组分配的元素个数太少,把第3行中的5改成10即可调试成功。
4.代码截图
题目3:7-4 通讯录的录入与显示
1. 本题PTA提交列表
2. 设计思路
用结构数组输入朋友的信息。再输入要查找的记录编号在数组中查找,若没有找到,输出 Not Found ;若找到,输出对应朋友信息。
3.本题调试过程碰到问题及PTA提交列表情况说明
错误原因:第15行条件欠缺,该条件成立的判断是输入的y值不仅要满足y>=n还需满足y<0
调试:将15行改成 if(y>=n||y<0) .
4.代码截图
二、同学代码结对互评
7-5 复数四则运算
1.互评同学名字
罗艺芳
2.我的代码,同学的代码截图
罗艺芳的代码:
我的代码:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
(1).罗艺芳的代码是将复数四则运算计算完成后按顺序一个一个输出,我是把四则运算符号用数组表示,再用循环计算,依次输出。
(2).主要的差别是输出方式不同,还有罗艺芳的代码有用到结构体,我没有用到。
(3).我更喜欢我的代码,更加简洁明了。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.你学会了什么?
(1).用结构struct定义可以把一些数据分量聚合成一个整体的数据类型。
(2).结构变量可以通过结构成员操作符“.”对其某个成员进行引用,结构类型变量的存储布局按其类型定义中成员的先后顺序排列。
(3).一个结构类型变量所占的内存空间是其各个成员所占内存空间之和。
(4) .(*p).num中的的括号是必不可少的,因为成员运算符“.”的优先级高于“*”的优先级。
2.本周的内容,你还不会什么?
汉诺塔问题还是不太理解。
链表
一、PTA实验作业
题目1:7-10 单向链表1
1. 本题PTA提交列表
2. 设计思路
首先创建链表输入一组数,再从头指针head开始判断是否为奇数值,若是,head=head->next,直到找到一个非奇数值将其定义为头结点,然后依次判断后面的数是否为奇数值,若是则删除,最后将删除后的链表输出。
3.本题调试过程碰到问题及PTA提交列表情况说明
出错原因:没有注意输出格式,题目要求最后一个数字后不能有空格,可是我的这种做法末尾有空格。
调试:改正输出那个位置的代码,先输出第一个数字,后面的数字用“空格+数字”的格式输出。
4.代码截图
题目2:7-12 单向链表4
1. 本题PTA提交列表
2. 设计思路
将输入的第一个非-1的数定义为头结点,后面依次输入数字(!=-1),创建链表,将每次输进的数存入原先动态分配给它的一个结构体指针*p,令p->next=head,head=p.这样可以将输进的数逆序存进链表,最后将链表中的数输出就得到逆序数。
3.本题调试过程碰到问题及PTA提交列表情况说明
4.代码截图
题目3:7-13 单向链表5
1. 本题PTA提交列表
2. 设计思路
输入一组学生信息存进链表,再输入一个成绩g,从链表的头结点开始依次往后判断,若p->grade)<g,则把链表中的这个节点删去,最后将链表中所剩的学生信息输出。
3.本题调试过程碰到问题及PTA提交列表情况说明
出错原因:在这个代码中我犯了个非常微小的完全不应该犯的错误,第34、35行对p->num、p->name赋了值,可是忘记了对p->grade赋值,导致输出乱码。
调试:补上“p->grade=grade;”这一语句。
4.代码截图
二、同学代码结对互评
7-12 单向链表4
1.互评同学名字
雷慧
2.我的代码,同学的代码截图
雷慧的代码:
我的代码:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
(1).雷慧的代码是将链表头结点定义为空,我所创建的链表头结点非空。
(2).用雷慧的做法可以固定头结点的位置,我的做法需要通过不断判断找出头结点。
(3).我更喜欢雷慧的代码,省去判断头结点的步骤,更有条理性。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.你学会了什么?
(1).必要时可以用链表代替数组进行数据的存储和操作。这样有两个主要优势:一是不需要事先定义存储空间的大小,可以实时动态分配,内存使用效率高;二是可以很方便地插入新元素,操作效率高。
(2).sizeof可以判断所定义变量占据的内存空间。
(3).学会了操作链表的增删改查等。
2.本周的内容,你还不会什么?
对于链表中指针位置的替换还不太熟练。
3.链表考试总结
一开始做链表相关的题目时错误点非常多,后来改善了些,需要更加注意自己常犯的错误并及时改正。
以上是关于结构体和链表的主要内容,如果未能解决你的问题,请参考以下文章