2024-2025-1 20241320 《计算机基础与程序设计》第13周学习总结

2024-2025-1 20241320 《计算机基础与程序设计》第13周学习总结

作业信息

|这个作业属于哪个课程|
https://edu.cnblogs.com/campus/besti

|这个作业要求在哪里|
https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13

|这个作业的目标|
加入云班课,参考本周学习资源
自学教材
《C语言程序设计》第12章并完成云班课测试
|作业正文|
https://www.cnblogs.com/yixin20060813/p/18619762

教材学习内容总结

结构体:
定义:结构体是一种由多个不同类型的数据项组成的复合数据类型。
结构体变量的定义和使用:可以定义结构体变量来存储多个相关数据项,并通过结构体指针来访问这些数据项。
共用体:
定义:共用体是一种特殊的结构体,其所有成员共享同一段内存空间。
共用体的特点和使用:共用体可以用于存储不同类型的数据,但每次只能存储其中一种类型的数据。由于共用体的成员共享内存空间,因此可以节省内存资源。
链式结构的基本概念
链表:链表是一种通过指针将一系列节点链接起来的数据结构。每个节点包含两部分:一部分用于存储数据(称为数据域),另一部分用于存储指向下一个节点的指针(称为指针域或链域)。
节点:链表中的基本单元,每个节点包含数据域和链域。
头节点与头指针:
头节点:有时为了操作方便,会在链表的首部添加一个特殊的节点,称为头节点。头节点通常不存储有效数据,只起到标识链表的作用。
头指针:指向链表第一个有效节点的指针(如果链表中包含头节点,则头指针指向头节点后的第一个有效节点)。
二、链表的分类
单向链表:每个节点只包含一个指向下一个节点的指针。
双向链表:每个节点包含两个指针,一个指向下一个节点,一个指向上一个节点。这样可以在链表中向前或向后遍历。
循环链表:链表的最后一个节点指向链表的第一个节点(或头节点),形成一个环形结构。
三、链表的基本操作
创建链表:根据需求分配节点,并初始化节点中的数据域和链域。
插入节点:在链表的指定位置插入新节点。这包括找到插入位置的前一个节点,调整指针域以指向新节点,并初始化新节点的指针域。
删除节点:从链表中删除指定节点。这包括找到要删除的节点的前一个节点,调整其指针域以跳过要删除的节点,并释放要删除节点的内存。
查找节点:根据条件在链表中查找指定节点。
遍历链表:从头节点开始,依次访问链表中的每个节点,直到链表末尾。
四、链表的优缺点
优点:
动态分配内存:链表可以根据需要动态地分配和释放内存,避免了数组等静态数据结构可能导致的内存浪费。
插入和删除操作高效:在链表中插入和删除节点不需要移动其他元素,只需调整指针域即可。
缺点:
访问速度慢:由于链表中的数据是分散存储的,访问某个特定位置的元素需要从头节点开始遍历链表。
占用额外内存:链表中的每个节点都需要额外的指针域来存储指向下一个节点的指针。

教材学习中的问题和解决过程(先问 AI)

结构体名称冲突
问题:结构体名称与现有类型或命名空间中的名称冲突,导致编译错误。
解决方法:确保结构体名称是唯一的,并且不会与现有类型或命名空间中的名称冲突。可以通过添加前缀或后缀来区分不同的结构体名称。
结构体不能继承类
问题:尝试将结构体继承自类,但C#等语言不允许结构体继承类。
解决方法:如果需要继承,请使用类而不是结构体。结构体通常用于表示简单的数据集合,而类则更适合表示具有复杂行为和属性的对象。
结构体成员访问权限问题
问题:结构体成员默认是公开的(public),这可能导致数据泄露和不安全的访问。
解决方法:根据需要将结构体成员设置为私有(private)、受保护(protected)或内部(internal)。这可以通过在结构体定义中指定成员访问修饰符来实现。
结构体不可变性问题
问题:结构体是不可变的(immutable),即一旦创建,其内容就不能更改。尝试修改结构体的字段会导致编译错误。
解决方法:如果需要可变性,请使用类而不是结构体。或者,可以使用可变的结构体字段,但请注意这可能会导致意外的副作用和性能问题。另一种方法是提供方法来修改结构体的字段,但这些方法应该谨慎使用以避免破坏结构体的不可变性。
结构体构造函数问题
问题:结构体不能有显式的构造函数,因为它们会自动生成默认构造函数。
解决方法:如果需要自定义初始化逻辑,可以在结构体中添加静态工厂方法或实例方法。这些方法可以返回一个新的结构体实例,并在返回之前对其进行初始化。
结构体序列化问题
问题:结构体可能无法正确序列化,特别是当它们包含引用类型或其他复杂数据时。
解决方法:确保结构体实现ISerializable接口(在C#等语言中),并正确处理序列化和反序列化逻辑。这通常涉及到在结构体中实现特定的方法,如GetObjectData(用于序列化)和构造函数(用于反序列化)。

基于AI的学习

  • 计划学习时间:6小时

  • 实际学习时间:6小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2024-12-20 18:25  20241320易鑫  阅读(25)  评论(0)    收藏  举报