逻辑结构与物理结构
- 逻辑结构
定义:是指数据对象中数据元素之间的相互关系。
集合结构
定义:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。
特点
- 无序性:集合中的元素没有特定的顺序。
- 唯一性:集合中的每个元素都是唯一的,没有重复。
集合结构的基本操作
添加元素 (Add)
Python
创建一个空集合
my_set = set()
添加元素
my_set.add(1) # 添加单个元素
my_set.update([2, 3]) # 添加多个元素
print(my_set) # 输出: {1, 2, 3}
移除元素 (Remove)
python
移除集合中的元素
my_set.remove(2) # 移除元素2
print(my_set) # 输出: {1, 3}
尝试移除一个不存在的元素会抛出KeyError
my_set.remove(4) # 这行会抛出KeyError
使用discard方法可以避免抛出异常
my_set.discard(4) # 如果元素不存在,不会抛出异常
检查元素 (Has/Contains)
python
检查元素是否存在于集合中
element = 2
if element in my_set:
print(f"{element} 在集合中") # 不会输出,因为2已经被移除了
else:
print(f"{element} 不在集合中") # 输出: 2 不在集合中
清空集合 (Clear)
Python
清空集合中的所有元素
my_set.clear()
print(my_set) # 输出: set()
获取集合大小 (Size)
python
添加一些元素到集合中
my_set.update([1, 2, 3, 4, 5])
#获取集合的大小
size = len(my_set)
print(f"集合的大小是: {size}") # 输出: 集合的大小是: 5
获取所有元素 (Values)
python
获取集合中的所有元素
elements = list(my_set) # 将集合转换为列表,因为集合本身不支持索引操作
print(elements) # 输出可能是: [1, 2, 3, 4, 5],但集合是无序的,所以顺序可能不同
集合的运算
python
创建两个集合
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
交集 (Intersection)
intersection = set1 & set2
print(intersection) # 输出: {3, 4}
并集 (Union)
union = set1 | set2
print(union) # 输出: {1, 2, 3, 4, 5, 6}
差集 (Difference)
difference = set1 - set2
print(difference) # 输出: {1, 2}
对称差集 (Symmetric Difference)
symmetric_difference = set1 ^ set2
print(symmetric_difference) # 输出: {1, 2, 5, 6}
线性结构
定义:线性结构中的元素之间是一对一的关系,是一个有序数据元素的集合。
特点
1. 存在唯一的没有前驱、只有一个直接后继的“头”元素。
2. 存在唯一的没有后继、只有一个直接前驱的“尾”元素。
3. 除了“头”元素和“尾”元素之外,集合中的每个元素有且只有一个直接前驱、有且只有一个直接后继。
线性结构在实际应用中有许多用途,
1. 动态列表实现:可以使用链表来实现动态列表,通过插入和删除操作来实现数据的动态更新。
2. 函数调用与内存管理:栈是一种重要的数据结构,常用来实现函数的调用、表达式求值、内存管理等。在函数调用中,函数调用的顺序和返回地址是通过栈来维护的;在内存管理中,栈被用来分配和释放函数的局部变量和临时数据。
3. 任务调度与消息传递:队列也是一种常用的数据结构,常用来实现任务调度、消息传递等。在任务调度中,任务被按照加入队列的顺序进行执行;在消息传递中,消息的接收顺序和处理顺序是通过队列来保证的。
4. 连接器与文件管理:线性结构可以用于实现各种连接器,比如USB、HDMI等,其上的插孔和插针的连接顺序和位置是线性结构的一个典型应用。同时,文件系统中的文件和目录也可以使用线性结构来进行组织和管理。
树形结构
定义:树形结构中的数据元素之间存在一种一对多的层次关系,还是一种层次化的嵌套结构,其外层和内层具有相似的结构,因此这种结构通常可以递归地表示。
图形结构
定义:图形结构的数据元素是多对多的关系。
物理结构
定义:是指数据的逻辑结构在计算机中的存储形式。
顺序存储结构
定义:是把数据元素存放在地址连续的连续的储存单元里,其数据间的逻辑关系和物理关系是一致的。(排队占位,按照顺序占领空间)
链式存储结构
定义:是把数据元素存放在任意位置的存储单元里,这组单元可以是连续的,也可以是不连续的。(通过地址找到相关联数据元素的位置)
特点:
- 存储密度小:相对于顺序存储结构,链式存储结构需要额外的空间来存储指针,因此其存储密度较小。
- 插入和删除操作灵活:在链式存储结构中,结点可以被插入到链表的任何位置,包括首、中、末,而且不需要移动其他结点中的指针。这使得链式存储结构在需要频繁进行插入和删除操作的场景中具有优势。
- 动态调整大小:链表的大小可以按需伸缩,是一种动态存储结构。当需要添加新元素时,可以动态分配新的存储空间;当删除元素时,也可以释放不再需要的存储空间。
- 查找效率较低:由于链式存储结构中的元素是通过指针链接起来的,因此查找某个元素时需要从头结点开始逐个遍历,直到找到目标元素为止。这使得链式存储结构在查找操作上的效率相对较低。