常用数据结构(一)
计算机中的数据有多种多样,如何处理数据就成为了一门学问。而数据结构就是关于如何组织数据和组织好的数据怎么处理
的一门学问。
数据结构包括下面三方面内容:
- 数据逻辑结构:描述数据元素之间的逻辑关系。
- 数据物理结构:描述数据元素是在具体计算机设备中如何存放的。
- 数据操作方法:也常被称为算法,是一种说明如何操作数据的方法。
这里“算法”概念有些局限,算法的正真含义是使用计算机解决特定问题的方法。
怎么样,算法一点儿也不神奇,只是解决问题的方法而已。
常见数据逻辑结构
数组
就是内存中一块连续的区域
,紧密排列
了一些相同类型
的数据.也被称为顺序表
.
不足:
需要事先知道同样的元素最多有多少个,不然就无法开辟出合适的内存区域(要么太多而浪费,要么太小而不足).
思考:能不能有一种数据结构,能够灵活地按需而分配空间呢?
答:动态数组或链表
动态数组,按需要可进行连续空间的增加或减少.完全按需分配.
单向链表
链表的基本单位是节点
,每个节点拥有一个数据区
和next指针
,其中数据区用于存放数据,next指针指向下一个节点。
与顺序表相比,链表可以根据需要自由选择节点的数据,从而解决了内存分配不合适的问题。且对内存空间连续块要很低,只要能满足节点的大小即可。
数组与单链表的比较
方面 | 数组 | 链表 | 补充说明 |
---|---|---|---|
内存空间 | 连续 | 不连续 | |
结构长度 | 一般固定 | 可变 | |
增删速度 | 低 | 高 | 顺序表在插入和删除元素时,需要找到特定位置的元素,然后将其后面的全部元素都向前移动或向后移动,以填补或腾出空位因此顺序表的插入和删除的时间复杂度都是O(N) 链表只需要摘去或者挂上一个节点就行了,因此链表的插入和删除的时间复杂度都是O(1); |
查找速度 | 高 | 低 | 顺序表,可以通过下标,直接询问任一元素。即时间复杂度为O(1) 链表,只能通过第一个节点开始,一个一个的沿着next指针数过去。即时间复杂度为O(N) |
访问方式 | 可随机访问 | 只能顺序访问 |
STACK
QUEUE
跳表
散列表
二叉树
红黑树
递归树
HEAP
图
评价算法的标准
常用计算机算法
递归
排序
冒泡排序
插入排序
快速排序
线性排序
查找
二分查找
贪心
分治
回溯
动态规划