• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

y9

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

结构体和链表

 

结构体

 

一、PTA实验作业

题目1:通讯录排序

1.本题PTA提交列表

2. 设计思路

定义结构体数组保存不同人的姓名、生日、电话号码,输入相关信息,

用冒泡排序法将n个人按照生日的先后顺序排序,最后输出。

流程图:

3.本题调试过程碰到问题及PTA提交列表情况说明。

最长n答案错误是因为数组长度不够,应该再多一位。

题目2:通讯录的录入与显示

1. 本题PTA提交列表

2. 设计思路

定义结构体数组保存n条记录包含姓名、出生日期、性别、固定电话号码、移动电话号码。

输入n条记录,输入k和k个整数,表示要查询的记录编号,若找到该记录编号,则按格式输出,

否则输出Not Found

流程图:

3.本题调试过程碰到问题及PTA提交列表情况说明。

最长字符串和最小n,最大n都出错,刚开始以为是字符串的长度不够,

但长度增加之后依然出错,而且最小n也错了,说明不是这个问题。

又看了好几遍题目和代码,发现如果输入的k个数存在负数,数组下标从0开始

就找不到那条记录,所以if条件应改为(a[i]<n&&a[i]>=0)。

题目3:时间换算

1. 本题PTA提交列表

 

 2. 设计思路

定义结构体数组储存时,分,秒,输入时分秒,和要加上的秒数n,

把n加上秒数,循环令j=秒数,如果j>=60,j=j-60,

把剩下的秒数赋值给数组中的秒数,分数和时数同样也是如此,最后输出。

流程图:

3.本题调试过程碰到问题及PTA提交列表情况说明

本题没有出现什么错误。

 

链表

 

题目1:单向链表4

1. 本题PTA提交列表

 

2. 设计思路

定义结构struct node{
  int n;
  struct node*next;
 };

定义结构变量head,p;

输入变量a,a!=-1时,进入循环,新建链表

p->n=a; p->next=head;head=p;

最后循环遍历输出

流程图:

 3.本题调试过程碰到问题及PTA提交列表情况说明

刚开始没有用链表解题时格式输出错误,行末无空格

题目2:单向链表5

1. 本题PTA提交列表

 

2. 设计思路

定义结构体变量p,tail,head;并初始化为NULL;输入num,

num!=0时进入循环,建立链表,关键步骤为:if(head==NULL),head=p;

else  tail->next=p; tail=p;建完退出循环,输入n,

遍历链表,将链表中成绩大于等于n的结构体输出。

流程图:

 

 3.本题调试过程碰到问题及PTA提交列表情况说明

本题没有出现错误

题目3:单向链表1

1. 本题PTA提交列表

2.设计思路

定义链表节点head,p,p2,tail;建立带有头节点的单项链表,

遍历链表,定义一个变量s用来计算链表中的奇数值节点的个数,

循环s次删除链表中的奇数值节点,遍历输出。

流程图:

编译错误:修改的时候忘了加反向大括号。

格式错误;

格式错误是输出的格式不满足题目要求,题目要求输出最后没有空格,

且每一行之后都要换行,我原本的思路是不删除奇数值节点,只把满足条件

的偶数值节点输出,但是这样就无法控制格式,只好删除奇数值节点,

形成新的链表,循环遍历链表再加个条件控制就好了。

二、同学代码结对互评

我的代码:

同学代码截图:

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?

我的代码把输入的n赋值给秒数,再用三个循环,分别改变秒,分,时的数据,

彦婵同学的代码把n用来循环,循环之后再加if条件,改变秒分时的数据,

我更喜欢我的代码风格,代码简洁明了。

 

三、截图本周题目集的PTA最后排名

四、本周学习总结

1.你学会了什么?

1.1 结构体的定义

struct 结构体名  struct  student{

                   char  name[20];

                            } stu;

也可这样定义:声明结构体后,大括号后不加变量,再定义struct student  stu1, stu2 ;

结构体数组的定义: struct student  x[10];

1.2 结构体成员的访问

两种方式: 直接访问。如:stu1.name

                  用指针访问。先定义指向结构体的指针:struct student *p;

                  然后可以通过: p->成员变量  来访问。

1.3链表结构体声明

struct node{

            int n;

           struct node *next;};

1.4链表的增删该查

链表是一种常见的动态进行存储分配的数据结构.用链表操作增加或删除数据效率更高。

链表形式:带头结点的单向链表、无头结点的单向链表

建立链表:头插法,尾插法

增加节点:第i个结点后面插入一个新节点:

(1).定位第i个结点.让指针q指向第i个结点,指针p指向要插入的结点.
(2).链接后面的指针:p->next=q->next.
(3).链接前面指针:q->next=p.

插入新结点时,可能遇到两种特殊情况:

其一是向空表中插入新节点,其二是向链表最后一个元素后面插入一个新结点.

删除节点:删除链表中第i个结点:

(1).定位第i-1个结点位置.指针q指向第i-1个结点,指针p指向被删除结点.
(2).摘链:q->next=p->next.
(3).释放结点p:free(p)

2.本周的内容,你还不会什么

链表的操作还不太熟悉,尤其是链表的增加和删除。

 

posted on 2018-01-20 15:50  y9  阅读(332)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3