一、我们先来看一下数据结构的基本定义:
数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。
数据的逻辑结构和物理结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。
数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解与抽象。
二、数据结构的起源
世界上第一台计算机诞生于美国的宾夕法尼亚大学,名字叫做ENIAC(Electronic Numerical Integrator And Computer),即为电子数字积分计算机。每秒可以进行5000次加法或者400次乘法。由此可见,在当时的情况下,计算机的研制主要是为了进行数值计算,解决的是数值计算的问题,例如乘除加减。
后来随着社会的发展,除了数值计算的问题,我们在现实生活中更加需要解决的是一些非数值计算的问题,例如,文字,图像,声音等等。在这个时候,我们就需要一些科学的方法(比如表、树和图等数据结构)来解决非数值计算的程序设计问题。所以数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。
1968年,美国的高德纳在其所写的《计算机程序设计艺术》第一卷《基本算法》中第一次较为系统的阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。这个时候,数据结构才算是成为了一门独立研究的学科。之后无数的莘莘学子保受其折磨,又因此而获益,痛并快乐着。
之后,70年代初,出现了大型程序,软件也开始相对独立,结构程序设计成为程序设计方法学的主要内容,人们越来越重视数据结构,认为程序设计实际上是找到数据最合理的组织方式,并设计一种好的计算方法,对其进行计算。
程序设计 = 数据结构 + 算法
三、必备数据结构
线性表、栈、队列、串、数组、树、图
其他高级数据结构:跳跃表。。红黑树、treap树。。。
下面我们看一下常见数据的逻辑结构和物理结构:
四、那什么是算法呢?
可以认为算法是问题的程序化解决方案。
五、程序员必备算法
查找:顺序查找、二分查找、分块查找;
树表的查找、散列表(哈希表)的查找
排序:典型常用的八大排序算法
内部排序:插入类、交换类、选择类、归并类、分配类
直接插入排序、折半插人排序、希尔排序(缩小增量排序)、冒泡排序、选择排序、堆排序、归并排序、基数排序
外部排序:如果待排序的记录数目很大, 无法一次性调入内存, 整个排序过程就必须借用外存分批调入内存才能完成。
其他算法:图论算法、动态规划、搜索与回溯算法
推荐一个很好的可以动态演示各种数据结构与相关算法的网站 https://visualgo.net/en
先Mark一下,后面一一攻克吧!!!