数据结构总结

本文介绍了常用数据结构,如数组、链表、堆栈等,并详细解释了每种数据结构的特点和应用场景。此外还探讨了算法的衡量标准,包括时间复杂度和空间复杂度,并提供了几种典型的查找和排序算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常用的数据结构

数据结构:相互之间存在一种,或者多种特定关系的数据元素的集合

数据:能够输入计算机中,由计算机处理的元素

结构:数据之间的关系

例如:点状,线性,星形,树形

1. 数组

连续存储的数据结构,通过起始数组和偏移量来对其中每一个元素进行访问

优势:随机访问性好,占用空间较小

时间复杂度:O(1)

线性存储:每个元素都有一个前驱元素和后续元素,连续存储

插入和删除耗费资源

2. 链表

也是线性存储的数据结构,但和数组不同的是不连续的数据结构

链表中的每一个点称为节点,每个节点都包含两个部分

数据域:元素

指针域:下一个元素的地址

随机访问差,占用空间大

插入和删除效率好,只需要修改指针

单向链表和双向链表(有三个区域,中间是数据域,前驱元素地址,后续元素地址)

3. 堆栈

受限的线性表:只能从栈顶添加、删除元素

栈顶,栈底

先进后出。栈顶元素先出 LIFO last in first out

应用场合:函数调用,异常的传播和抛出

4. 队列

受限的线性表:只能从队头删除,从队尾添加

先进先出。队头元素先出  FIFO first in first out

双端队列:同时实现队列和堆栈的特性

5. 树

树是由节点集和连接每对节点的有向边集组成

根、父节点,子节点、叶子节点

二叉树:任何一个节点的孩子数不超过两个,最多只有两个子节点

满二叉树: 所有的节点都有两个子节点(除叶子节点以外)

完全二叉树:编号跟满二叉树一致

二叉树的遍历:(从上到下,从左到右)

先序:根,左,右

中序:左,根,右

后序:左,右,根

6. 哈希表

通过哈希函数(映射关系),将无限的数据映射到有限的地址集

Python字典使用的是哈希存储

二、算法的衡量标准

1. 时间复杂度:

以最坏时间复杂度为准

常用的时间复杂度

O(1)< O(logn)<O(n)<O(nlogn)<O(n^2)

2. 空间复杂度

以空间换时间的方式。

三、查找

1. 顺序查找:从头到尾

2. 折半查找:每次查找中心点,通过判断大小,来进行重新获取start和end

注意:只适合排好序的列表

四、排序

1. 冒泡排序

掌握

俩俩元素比较,I  i+1  

外循环的界限:n-1

内循环的界限:n-1-i

时间复杂度:最好O(n)    O(n^2)

稳定:稳定

2. 选择排序

每次选择最大或者最小元素,放到前面,排序

时间复杂:O(n^2)

稳定性:不稳定

3. 插入排序

从第二个元素开始,插入先有排好队的队伍中,保证每个元素插入之后还是有序的

时间复杂度:最好O(n)    O(n^2)

稳定性:稳定

4. 希尔排序

插入排序的升级,加入了增量,来分组

时间复杂度:不定

稳定性:不稳定

5. 快速排序

递归的执行查找中心点,将比中心点小的元素放左侧,比中心点大的放右侧

时间复杂度O(nlogn)

稳定性:不稳定

6. 归并排序

分久必合合久必分:将两个有序的数据集合合并成一个有序的数据集

时间复杂度:O(logn)

稳定性:稳定

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值