2023-2024-1 20231304 《计算机基础与程序设计》第七周学习总结

发布时间 2023-11-12 20:57:34作者: 20231304王星婷

2023-2024-1 20231304 《计算机基础与程序设计》第七周学习总结

作业信息

这个作业属于哪个课程 2023-2024-1-计算机基础与程序设计
这个作业要求在哪里 2023-2024-1计算机基础与程序设计第七周作业
这个作业的目标 数组与链表、基于数组和基于链表实现数据结构、无序表与有序表、树、图、子程序与参数
作业正文 2023-2024-1 20231304 《计算机基础与程序设计》第七周学习总结

教材学习内容总结

  1. 数组与链表:
    数组:在内存中是一块连续的区域,可以快速访问特定位置的数据。适用于数据元素数量固定且已知的情况。
    链表:由不连续的节点组成,每个节点包含数据和指向下一个节点的指针。适用于动态分配内存和数据元素数量未知的情况。

  2. 基于数组实现的数据结构:
    线性表、栈、队列、广义表等。

基于链表实现的数据结构:
单链表、双链表、循环链表、哈希表等。

  1. 无序表与有序表:
    无序表:数据元素之间没有顺序关系,如数组和链表。
    有序表:数据元素之间存在顺序关系,如线性表(顺序存储)和树(层次结构)。

  2. 树:
    一种层次结构,由节点组成。每个节点包含一个数据元素和指向子节点的指针。树的最顶层节点称为根节点,最底层节点称为叶节点。树的一些应用场景包括二叉搜索树、AVL树、红黑树等。

  3. 图:
    由顶点和边组成,描述顶点之间的关系。图分为有向图和无向图。常见的图算法包括最短路径算法(如Dijkstra算法)、最小生成树算法(如Kruskal算法)等。

  4. 子程序与参数:
    子程序:一个独立的、可重复使用的程序模块,可以接受输入参数并返回结果。
    参数:子程序中传递给输入的数据,用于实现特定功能。参数可以是变量、常量或表达式等。子程序和参数的关系类似于函数和参数的关系。

基于AI的学习

me :
我在学数组与链表知识点,请你以苏格拉底的方式对我进行提问,一次一个问题
ChatGPT :
好的,我将通过提问的方式来帮助你学习数组和链表的知识点。
在数组和链表中,如何添加一个新的元素?
me :
在数组中添加新元素:

创建一个空数组
arr = []

添加新元素
arr.append(5)
在链表中添加新元素:

class Node:
def init(self, data=None):
self.data = data
self.next = None

class LinkedList:
def init(self):
self.head = None

# 在链表末尾添加新元素
def append(self, data):
    if not self.head:
        self.head = Node(data)
    else:
        current = self.head
        while current.next:
            current = current.next
        current.next = Node(data)

ChatGPT :
数组和链表分别适用于哪些场景?
me :
数组适用于需要快速查找、频繁读取的场景,比如静态数据的存储和处理。其优点是寻址速度快,但插入和删除操作较慢。

链表适用于需要频繁插入和删除元素的的场景,比如动态数据存储和处理。其优点是插入和删除操作快,但寻址速度相对较慢。

在实际应用中,如果数据量较大且元素变动频繁,链表可能更适合。如果数据量较小且查找和读取操作较多,数组可能更适合。

此外,链表和数组都可以用于实现其他更复杂的数据结构,如哈希表、队列等。链表可以看作是动态数组的一种实现方式,哈希表则综合了数组和链表的优点,既有快速的查找和插入删除操作,又有较小的内存占用。

ChatGPT :
如何在链表中实现快速查找?
me :

  1. 定义一个指向链表头节点的指针,用于遍历链表。
  2. 定义一个目标节点,用于存储查找的目标值。
  3. 使用循环或递归遍历链表,比较每个节点的值与目标值。
  4. 当找到目标值时,返回当前节点的索引或位置。
  5. 如果没有找到目标值,返回-1或一个错误信息。

ChatGPT :
如何在链表中实现快速插入和删除?
me :

  1. 快速插入:
    首先,创建一个双向链表结构。然后在插入节点时,分为以下步骤:
    a. 找到要插入节点的前一个节点。
    b. 创建一个新的节点,并将新节点的值设置为要插入的值。
    c. 将新节点连接到前一个节点和当前节点的next指针。
    d. 更新前一个节点的next指针指向新节点。

  2. 快速删除:
    首先,创建一个双向链表结构。然后在删除节点时,分为以下步骤:
    a. 找到要删除的节点。
    b. 更新前一个节点的next指针指向要删除节点的下一个节点。
    c. 删除要删除节点。

上周考试错题总结

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
第五周 300/1600 2/11 20/110
第六周 200/1800 3/14 20/135
第七周 200/2000 1/15 20/155
  • 改进情况:

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

参考资料