结构体和链表

结构体

一、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.链表考试总结

一开始做链表相关的题目时错误点非常多,后来改善了些,需要更加注意自己常犯的错误并及时改正。

 

posted on 2018-01-20 11:00  bingyan  阅读(2982)  评论(0编辑  收藏  举报