2023-2024-1 20231304 《计算机基础与程序设计》第七周学习总结
作业信息
这个作业属于哪个课程 | 2023-2024-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2023-2024-1计算机基础与程序设计第七周作业 |
这个作业的目标 | 数组与链表、基于数组和基于链表实现数据结构、无序表与有序表、树、图、子程序与参数 |
作业正文 | 2023-2024-1 20231304 《计算机基础与程序设计》第七周学习总结 |
教材学习内容总结
-
数组与链表:
数组:在内存中是一块连续的区域,可以快速访问特定位置的数据。适用于数据元素数量固定且已知的情况。
链表:由不连续的节点组成,每个节点包含数据和指向下一个节点的指针。适用于动态分配内存和数据元素数量未知的情况。 -
基于数组实现的数据结构:
线性表、栈、队列、广义表等。
基于链表实现的数据结构:
单链表、双链表、循环链表、哈希表等。
-
无序表与有序表:
无序表:数据元素之间没有顺序关系,如数组和链表。
有序表:数据元素之间存在顺序关系,如线性表(顺序存储)和树(层次结构)。 -
树:
一种层次结构,由节点组成。每个节点包含一个数据元素和指向子节点的指针。树的最顶层节点称为根节点,最底层节点称为叶节点。树的一些应用场景包括二叉搜索树、AVL树、红黑树等。 -
图:
由顶点和边组成,描述顶点之间的关系。图分为有向图和无向图。常见的图算法包括最短路径算法(如Dijkstra算法)、最小生成树算法(如Kruskal算法)等。 -
子程序与参数:
子程序:一个独立的、可重复使用的程序模块,可以接受输入参数并返回结果。
参数:子程序中传递给输入的数据,用于实现特定功能。参数可以是变量、常量或表达式等。子程序和参数的关系类似于函数和参数的关系。
基于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或一个错误信息。
ChatGPT :
如何在链表中实现快速插入和删除?
me :
-
快速插入:
首先,创建一个双向链表结构。然后在插入节点时,分为以下步骤:
a. 找到要插入节点的前一个节点。
b. 创建一个新的节点,并将新节点的值设置为要插入的值。
c. 将新节点连接到前一个节点和当前节点的next指针。
d. 更新前一个节点的next指针指向新节点。 -
快速删除:
首先,创建一个双向链表结构。然后在删除节点时,分为以下步骤:
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 |
- 改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
- 《计算机科学概论》
- ...