当前位置:实例文章 » 其他实例» [文章]王道考研数据结构第一章知识点总结

王道考研数据结构第一章知识点总结

发布人:shili8 发布时间:2025-02-22 20:15 阅读次数:0

**王道考研数据结构第一章知识点总结**

**1.1 算法的定义和分类**

算法是指解决一个问题所遵循的一系列步骤或操作。根据算法的输入输出特征,可以将算法分为两类:

* **确定性算法**:对于同样的输入,算法总是能得到相同的输出。
* **非确定性算法**:对于同样的输入,算法可能得到不同的输出。

**1.2 算法的时间和空间复杂度**

算法的时间复杂度是指算法执行所需的时间量,而空间复杂度是指算法所占用的存储空间。常见的时间复杂度包括:

* **O(1)**:表示算法的时间复杂度为常数,不随输入大小变化。
* **O(log n)**:表示算法的时间复杂度与输入大小的对数成正比。
* **O(n)**:表示算法的时间复杂度与输入大小成线性关系。
* **O(n log n)**:表示算法的时间复杂度为输入大小的乘积。
* **O(n^2)**:表示算法的时间复杂度为输入大小的平方。

常见的空间复杂度包括:

* **O(1)**:表示算法所占用的存储空间为常数,不随输入大小变化。
* **O(log n)**:表示算法所占用的存储空间与输入大小的对数成正比。
* **O(n)**:表示算法所占用的存储空间与输入大小成线性关系。

**1.3 递归和迭代**

递归是指函数或过程在其自身上调用自己,以解决一个问题。迭代则是指通过反复执行一系列操作来解决一个问题。

递归的优点包括:

* **简洁**:递归可以使代码更加简洁和易于理解。
* **高效**:递归可以避免重复计算,从而提高算法的效率。

递归的缺点包括:

* **风险**:递归可能导致栈溢出或其他问题。
* **性能**:递归可能比迭代慢,因为每次调用都需要创建一个新的函数栈帧。

迭代的优点包括:

* **安全**:迭代不会导致栈溢出或其他问题。
* **高效**:迭代可以避免重复计算,从而提高算法的效率。

迭代的缺点包括:

* **复杂**:迭代可能使代码更加复杂和难以理解。
* **低效**:迭代可能比递归慢,因为每次循环都需要创建一个新的函数栈帧。

**1.4 数组和链表**

数组是指一组连续的内存单元,用于存储相同类型的数据。链表则是指一组非连续的内存单元,通过指针连接起来。

数组的优点包括:

* **高效**:数组可以快速访问任何元素。
* **低内存开销**:数组通常需要较少的内存开销。

数组的缺点包括:

* **固定大小**:数组的大小是固定的,不可改变。
* **插入和删除困难**:在数组中插入或删除一个元素可能会导致其他元素的位置发生变化。

链表的优点包括:

* **动态大小**:链表的大小可以根据需要动态调整。
* **插入和删除容易**:在链表中插入或删除一个元素只需改变相应指针的值即可。

链表的缺点包括:

* **低效**:链表可能比数组慢,因为每次访问都需要通过指针找到相应元素。
* **高内存开销**:链表通常需要较多的内存开销。

**1.5 栈和队列**

栈是指一个后进先出的数据结构,遵循 LIFO(Last-In-First-Out)原则。队列则是指一个先进先出的数据结构,遵循 FIFO(First-In-First-Out)原则。

栈的优点包括:

* **高效**:栈可以快速访问任何元素。
* **低内存开销**:栈通常需要较少的内存开销。

栈的缺点包括:

* **固定大小**:栈的大小是固定的,不可改变。
* **插入和删除困难**:在栈中插入或删除一个元素可能会导致其他元素的位置发生变化。

队列的优点包括:

* **动态大小**:队列的大小可以根据需要动态调整。
* **插入和删除容易**:在队列中插入或删除一个元素只需改变相应指针的值即可。

队列的缺点包括:

* **低效**:队列可能比栈慢,因为每次访问都需要通过指针找到相应元素。
* **高内存开销**:队列通常需要较多的内存开销。

**1.6例题**

#例题1:实现一个函数,计算两个链表的长度class Node:
 def __init__(self, data):
 self.data = data self.next = Nonedef get_length(head):
 length =0 while head is not None:
 length +=1 head = head.next return length#例题2:实现一个函数,合并两个有序链表class Node:
 def __init__(self, data):
 self.data = data self.next = Nonedef merge_two_lists(head1, head2):
 if head1 is None:
 return head2 elif head2 is None:
 return head1 else:
 if head1.data < head2.data:
 head1.next = merge_two_lists(head1.next, head2)
 return head1 else:
 head2.next = merge_two_lists(head1, head2.next)
 return head2#例题3:实现一个函数,判断两个链表是否相等class Node:
 def __init__(self, data):
 self.data = data self.next = Nonedef is_equal(head1, head2):
 while head1 is not None and head2 is not None:
 if head1.data != head2.data:
 return False head1 = head1.next head2 = head2.next return True


**总结**

本章主要介绍了算法的定义和分类、时间和空间复杂度、递归和迭代、数组和链表、栈和队列等基本概念。通过例题,展示了如何在实际场景中应用这些概念。

相关标签:
其他信息

其他资源

Top