# 学期2024-2025-1 学号20241405 《计算机基础与程序设计》第7周学习总结
作业信息
|这个作业属于哪个课程|[2024-2025-1-计算机基础与程序设计]https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP|
|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07|
|这个作业的目标|数组与链表 基于数组和基于链表实现数据结构|
|作业正文|https://www.cnblogs.com/sztheihei/p/18538247|
教材学习内容总结
数组和链表是两种基本的数据结构,它们在内存中存储数据的方式不同,这导致了它们在性能和使用场景上的差异。以下是数组和链表的一些基本特性和它们在实现数据结构时的优缺点。
数组(Array)
定义:
数组是一种线性数据结构,它使用连续的内存空间来存储固定大小的元素。
基于数组实现数据结构:
-
优点:
- 随机访问: 可以直接通过索引快速访问任意位置的元素,访问时间复杂度为 O(1)。
- 空间效率: 由于内存是连续的,所以空间利用率较高。
- 缓存友好: 由于数据连续存储,缓存命中率高,有利于性能。
-
缺点:
- 大小固定: 一旦创建,大小不可变,不适合不确定大小的数据集。
- 插入和删除效率低: 在数组中间插入或删除元素需要移动后续所有元素,平均时间复杂度为 O(n)。
- 内存浪费: 如果数组的容量没有被完全利用,可能会造成内存浪费。
链表(Linked List)
定义:
链表是一种线性数据结构,由节点组成,每个节点包含数据部分和指向下一个节点的指针。
基于链表实现数据结构:
-
优点:
- 动态大小: 可以根据需要动态地添加或删除节点,不需要预先分配固定大小的内存空间。
- 插入和删除效率高: 在链表中的任意位置插入或删除节点只需要改变指针,时间复杂度为 O(1)。
- 空间利用灵活: 可以根据需要分配内存,没有浪费。
-
缺点:
- 访问效率低: 无法像数组那样随机访问,必须从头开始遍历链表,访问特定元素的时间复杂度为 O(n)。
- 额外的内存开销: 每个元素都需要额外的空间来存储指向下一个元素的指针。
- 缓存不友好: 由于数据不连续存储,缓存命中率低,可能影响性能。
基于数组和链表实现的数据结构示例:
-
栈(Stack):
- 基于数组:使用数组的尾部进行 push 和 pop 操作。
- 基于链表:使用链表的头部进行 push 和 pop 操作。
-
队列(Queue):
- 基于数组:使用数组的尾部进行 enqueue 操作,头部进行 dequeue 操作。
- 基于链表:使用链表的尾部进行 enqueue 操作,头部进行 dequeue 操作。
-
哈希表(Hash Table):
- 基于数组:使用数组来存储哈希桶,每个桶可以是一个链表来解决冲突。
- 基于链表:整个哈希表可以是一个链表,每个节点包含键值对和哈希值。
-
图(Graph):
- 基于数组:使用邻接矩阵(二维数组)来表示图。
- 基于链表:使用邻接表(链表数组)来表示图,每个节点包含一个链表来存储其邻接节点。
选择数组还是链表来实现数据结构,取决于具体的应用场景和性能要求。例如,如果需要频繁访问元素,数组可能是更好的选择;如果需要频繁插入和删除,链表可能更合适。
教材学习中的问题和解决过程(先问 AI)
for与while如何选择使用那个?
选择使用 for
循环还是 while
循环主要取决于你的具体需求和代码的可读性。以下是一些指导原则,可以帮助你决定在不同情况下选择哪种循环结构:
使用 for
循环的情况:
- 已知循环次数:如果你事先知道循环需要执行多少次,
for
循环通常是更好的选择。for
循环的结构清晰,可以直接在循环声明中初始化循环变量、设置循环条件和更新循环变量。 - 简单的计数器循环:当你需要一个简单的计数器来控制循环次数时,
for
循环可以减少代码量,因为它将所有与循环变量相关的操作都包含在一个语句中。 - 数组和集合的遍历:在遍历数组或集合时,
for
循环可以方便地使用索引变量,代码更加简洁。
使用 while
循环的情况:
- 条件驱动的循环:当循环的执行依赖于某个条件,而这个条件可能在循环开始前并不满足,或者循环次数不确定时,
while
循环是更好的选择。 - 需要在循环开始前进行初始化:如果循环变量的初始化依赖于某些条件或计算结果,而这些条件或计算结果在循环开始前并不确定,那么使用
while
循环可能更合适。 - 循环次数可能为零:如果循环可能一次都不执行,使用
while
循环可以更自然地表达这一点,因为while
循环只有在条件为真时才会执行。
特殊情况:
do...while
循环:如果你需要确保循环体至少执行一次,即使条件在第一次检查时为假,那么do...while
循环是合适的选择。
代码可读性:
- 清晰表达意图:选择能够最清晰地表达你意图的循环结构。如果循环次数是明确的,
for
循环可能更直观;如果循环的执行完全取决于条件,while
循环可能更合适。 - 遵循团队规范:如果你在一个团队中工作,遵循团队的编码规范和风格指南也是一个考虑因素。
总的来说,没有绝对的规则来决定何时使用 for
循环或 while
循环,这取决于具体的应用场景和个人偏好。关键是选择能够使代码易于理解和维护的循环结构。
选择使用 for
循环还是 while
循环主要取决于你的具体需求和代码的可读性。以下是一些指导原则,可以帮助你决定在不同情况下选择哪种循环结构:
使用 for
循环的情况:
- 已知循环次数:如果你事先知道循环需要执行多少次,
for
循环通常是更好的选择。for
循环的结构清晰,可以直接在循环声明中初始化循环变量、设置循环条件和更新循环变量。 - 简单的计数器循环:当你需要一个简单的计数器来控制循环次数时,
for
循环可以减少代码量,因为它将所有与循环变量相关的操作都包含在一个语句中。 - 数组和集合的遍历:在遍历数组或集合时,
for
循环可以方便地使用索引变量,代码更加简洁。
使用 while
循环的情况:
- 条件驱动的循环:当循环的执行依赖于某个条件,而这个条件可能在循环开始前并不满足,或者循环次数不确定时,
while
循环是更好的选择。 - 需要在循环开始前进行初始化:如果循环变量的初始化依赖于某些条件或计算结果,而这些条件或计算结果在循环开始前并不确定,那么使用
while
循环可能更合适。 - 循环次数可能为零:如果循环可能一次都不执行,使用
while
循环可以更自然地表达这一点,因为while
循环只有在条件为真时才会执行。
特殊情况:
do...while
循环:如果你需要确保循环体至少执行一次,即使条件在第一次检查时为假,那么do...while
循环是合适的选择。
代码可读性:
- 清晰表达意图:选择能够最清晰地表达你意图的循环结构。如果循环次数是明确的,
for
循环可能更直观;如果循环的执行完全取决于条件,while
循环可能更合适。 - 遵循团队规范:如果你在一个团队中工作,遵循团队的编码规范和风格指南也是一个考虑因素。
总的来说,没有绝对的规则来决定何时使用 for
循环或 while
循环,这取决于具体的应用场景和个人偏好。关键是选择能够使代码易于理解和维护的循环结构。
do...while 循环:如果你需要确保循环体至少执行一次,即使条件在第一次检查时为假,那么 do...while 循环是合适的选择。这句话什么意思啊?
这句话的意思是,do...while
循环与其他循环结构(如 for
和 while
)的一个主要区别在于,do...while
循环会先执行循环体中的代码,然后再检查条件是否满足。这意味着无论条件如何,循环体至少会被执行一次。
其他
继续写代码