前言
抛出问题:
- 什么是数据结构和算法?
- 学习它们后会有什么好处?
- 为什么不能只使用数组和for循环来处理数据?
- 何时何地使用才算有意义?
主题:
数据结构和算法
数据结构是对计算机内存的数据的一种安排。
数组、链表、二叉树、哈希表等
算法是对这些结构中的数据进行各种处理,如;查找一条特殊的数据项或对数据进行排序
- 现实世界数据存储
- 程序员的工具
- 建模
许多的数据结构和技术与如何处理现实世界数据存储问题紧密相连。现实世界数据指的是那些描述处于计算机外部的物理实体的数据。
- 一条存货记录描述了一个真实存在的汽车部件或杂货店里的一种商品
- 一条财务交易记录描述了一笔支付电费实际填写的支票
数据结构的特性
数组 插入快,如果知道下标,可以非常快速的存取 查找慢,删除慢,大小固定
有序数组 比无序的数组查找快 删除和插入慢,大小固定
栈 提供后进先出的方式存取 存取其他项很慢
队列 先进先出 存取其他项很慢
链表 插入快,删除快 查找慢
二叉树 查找、插入、删除都快(如果树保持平衡) 删除算法比较复杂
红黑树 查找、插入、删除都快,树总是平衡的 算法复杂
2-3-4树 查找、插入、删除都快,树总是平衡的 算法复杂
哈希表 如果关键字已知,存取极快,插入快 删除慢(不知道关键字则存取很慢,对存储空间使用不充分)
堆 插入、删除快,对最大数据项的存取很快 对其他数据项存取慢
图 对现实世界建模 有些算法慢且复杂
以上数据结构除了数组之外,都可以被认为是抽象数据结构(ADT)
概述
对大多数数据结构来说,都需要知道:
- 插入一条新的数据项
- 寻找某一条特定的数据项
- 删除某一特定的数据项
- 如何迭代访问某一数据结构中的各项数据项