首页 > 编程语言 ># 学期2024-2025-1 学号20241405 《计算机基础与程序设计》第7周学习总结

# 学期2024-2025-1 学号20241405 《计算机基础与程序设计》第7周学习总结

时间:2024-11-10 17:42:03浏览次数:4  
标签:链表 20241405 学号 条件 2024 while 循环 数组 使用

作业信息

|这个作业属于哪个课程|[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)。
    • 额外的内存开销: 每个元素都需要额外的空间来存储指向下一个元素的指针。
    • 缓存不友好: 由于数据不连续存储,缓存命中率低,可能影响性能。

基于数组和链表实现的数据结构示例:

  1. 栈(Stack):

    • 基于数组:使用数组的尾部进行 push 和 pop 操作。
    • 基于链表:使用链表的头部进行 push 和 pop 操作。
  2. 队列(Queue):

    • 基于数组:使用数组的尾部进行 enqueue 操作,头部进行 dequeue 操作。
    • 基于链表:使用链表的尾部进行 enqueue 操作,头部进行 dequeue 操作。
  3. 哈希表(Hash Table):

    • 基于数组:使用数组来存储哈希桶,每个桶可以是一个链表来解决冲突。
    • 基于链表:整个哈希表可以是一个链表,每个节点包含键值对和哈希值。
  4. 图(Graph):

    • 基于数组:使用邻接矩阵(二维数组)来表示图。
    • 基于链表:使用邻接表(链表数组)来表示图,每个节点包含一个链表来存储其邻接节点。

选择数组还是链表来实现数据结构,取决于具体的应用场景和性能要求。例如,如果需要频繁访问元素,数组可能是更好的选择;如果需要频繁插入和删除,链表可能更合适。

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

for与while如何选择使用那个?
选择使用 for 循环还是 while 循环主要取决于你的具体需求和代码的可读性。以下是一些指导原则,可以帮助你决定在不同情况下选择哪种循环结构:

使用 for 循环的情况:

  1. 已知循环次数:如果你事先知道循环需要执行多少次,for 循环通常是更好的选择。for 循环的结构清晰,可以直接在循环声明中初始化循环变量、设置循环条件和更新循环变量。
  2. 简单的计数器循环:当你需要一个简单的计数器来控制循环次数时,for 循环可以减少代码量,因为它将所有与循环变量相关的操作都包含在一个语句中。
  3. 数组和集合的遍历:在遍历数组或集合时,for 循环可以方便地使用索引变量,代码更加简洁。

使用 while 循环的情况:

  1. 条件驱动的循环:当循环的执行依赖于某个条件,而这个条件可能在循环开始前并不满足,或者循环次数不确定时,while 循环是更好的选择。
  2. 需要在循环开始前进行初始化:如果循环变量的初始化依赖于某些条件或计算结果,而这些条件或计算结果在循环开始前并不确定,那么使用 while 循环可能更合适。
  3. 循环次数可能为零:如果循环可能一次都不执行,使用 while 循环可以更自然地表达这一点,因为 while 循环只有在条件为真时才会执行。

特殊情况:

  • do...while 循环:如果你需要确保循环体至少执行一次,即使条件在第一次检查时为假,那么 do...while 循环是合适的选择。

代码可读性:

  • 清晰表达意图:选择能够最清晰地表达你意图的循环结构。如果循环次数是明确的,for 循环可能更直观;如果循环的执行完全取决于条件,while 循环可能更合适。
  • 遵循团队规范:如果你在一个团队中工作,遵循团队的编码规范和风格指南也是一个考虑因素。

总的来说,没有绝对的规则来决定何时使用 for 循环或 while 循环,这取决于具体的应用场景和个人偏好。关键是选择能够使代码易于理解和维护的循环结构。
选择使用 for 循环还是 while 循环主要取决于你的具体需求和代码的可读性。以下是一些指导原则,可以帮助你决定在不同情况下选择哪种循环结构:

使用 for 循环的情况:

  1. 已知循环次数:如果你事先知道循环需要执行多少次,for 循环通常是更好的选择。for 循环的结构清晰,可以直接在循环声明中初始化循环变量、设置循环条件和更新循环变量。
  2. 简单的计数器循环:当你需要一个简单的计数器来控制循环次数时,for 循环可以减少代码量,因为它将所有与循环变量相关的操作都包含在一个语句中。
  3. 数组和集合的遍历:在遍历数组或集合时,for 循环可以方便地使用索引变量,代码更加简洁。

使用 while 循环的情况:

  1. 条件驱动的循环:当循环的执行依赖于某个条件,而这个条件可能在循环开始前并不满足,或者循环次数不确定时,while 循环是更好的选择。
  2. 需要在循环开始前进行初始化:如果循环变量的初始化依赖于某些条件或计算结果,而这些条件或计算结果在循环开始前并不确定,那么使用 while 循环可能更合适。
  3. 循环次数可能为零:如果循环可能一次都不执行,使用 while 循环可以更自然地表达这一点,因为 while 循环只有在条件为真时才会执行。

特殊情况:

  • do...while 循环:如果你需要确保循环体至少执行一次,即使条件在第一次检查时为假,那么 do...while 循环是合适的选择。

代码可读性:

  • 清晰表达意图:选择能够最清晰地表达你意图的循环结构。如果循环次数是明确的,for 循环可能更直观;如果循环的执行完全取决于条件,while 循环可能更合适。
  • 遵循团队规范:如果你在一个团队中工作,遵循团队的编码规范和风格指南也是一个考虑因素。

总的来说,没有绝对的规则来决定何时使用 for 循环或 while 循环,这取决于具体的应用场景和个人偏好。关键是选择能够使代码易于理解和维护的循环结构。
do...while 循环:如果你需要确保循环体至少执行一次,即使条件在第一次检查时为假,那么 do...while 循环是合适的选择。这句话什么意思啊?
这句话的意思是,do...while 循环与其他循环结构(如 forwhile)的一个主要区别在于,do...while 循环会先执行循环体中的代码,然后再检查条件是否满足。这意味着无论条件如何,循环体至少会被执行一次。

其他

继续写代码

标签:链表,20241405,学号,条件,2024,while,循环,数组,使用
From: https://www.cnblogs.com/sztheihei/p/18538247

相关文章

  • [考试记录] 2024.11.9 noip模拟赛9
    T1星际联邦菠萝算法。不过简化版。考虑从后往前遍历,如果当前的电的联通块大小为\(1\)的话,就把他和前缀最大值或者是前缀最小值连边。如果大于\(1\),那就将联通块里的最小权点和前缀最大值连边即可。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongcon......
  • CSP-2024游记
    考前把这个看一遍:考场策略应该是,10min解压+读题+建文件夹,先打暴力,别被一道题卡死(!!就比如去年的J组T1)别死磕,别死磕,别死磕尤其早上的J组只有3.5h,一定要注意时间分配。相信自己,心态不要炸,当成正常的模拟赛对待。如果非常慌可以选择深呼吸或者先打自己会的分。下考前5min反复......
  • 2024新生赛开关灯
    1.开干灯,二分法的题。在遥远的巨神峰,居住着许多灯泡精灵。每个精灵都有自己独特的编号,从1到n。在这个王国,所有的灯泡一开始都是亮着的,它们的光芒把整个王国照亮。然而,灯泡精灵们决定进行一场神秘的仪式,每个精灵按以下规则翻转灯光状态。仪式的规则如下:对于每个i=1,2,…,n,......
  • 2024-2025-1(20241321)《计算机基础与程序设计》第七周学习总结
    这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<了解并学习AI功能,回顾一周课程心得>作业正文...本博客链接https://www.cnblogs.com/guchua......
  • # 20222316 2024-2025-1 《网络与系统攻防技术》实验四实验报告
    一、实验内容1.学习总结1)恶意代码基本概念定义使计算机按照攻击者的意图运行以达到恶意目的的指令集合。指令集合:二进制执行文件,脚本语言代码,宏代码,寄生在文件、启动扇区等的指令流恶意代码目的:技术炫耀/恶作剧,远程控制,窃取私密信息,盗用资源,拒绝服务/......
  • 2024最新AI绘画系统软件(Midjourney)+GPT4文档分析总结,多模态识图理解,AI文生图/图生图/
    一、前言人工智能的快速发展已成为全球关注的焦点,其应用领域广泛,涵盖绘图、语言处理、视频编辑等。前沿技术不仅推动科技创新,还在艺术创作、内容生产和商业实践等方面展示出巨大潜力。例如,AI语言模型显著提升了内容自动生成、智能客服和文本翻译的效率及用户体验;AI绘图技术为......
  • 20222418 2024-2025-1 《网络与系统攻防技术》实验四实验报告
    1.实验内容一、恶意代码文件类型标识、脱壳与字符串提取对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;(2)使用超级巡警脱壳机等脱壳软件,......
  • 20222302 2024-2025-1 《网络与系统攻防技术》实验四实验报告
    1.实验内容1.1恶意代码文件类型标识、脱壳与字符串提取对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具;(2)使用超级巡警脱壳机等脱壳软件,对......
  • 2024-2025-1 20241415 《计算机基础与程序设计》第七周学习总结
    2024-2025-120241415《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第七周作业这个作业的目标数组与链表、基于数组和基于链表实现数据结构、无序表......
  • 2024-2025-1 20241314 《计算机基础与程序设计》第七周学习总结
    2024-2025-120241314《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程<班级的链接>2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第七周作业这个作业的目标数组与链表基于数组和基于链表实现数据......