目录
前言
著名的瑞士计算机科学家沃思(N.Wirth)教授曾提出:算法+数据结构=程序。可见作为一名程序员要想写出一个“好”的程序、开发出一种结构合理、性能良好的软件,仅仅掌握一门编程语言是不够的,还必须掌握算法与数据结构。换句话说,要想成为大神级程序员,数据结构就是“必修功法”。
一、基本概念和常用术语
1.基本概念
数据(data)是描述客观事物的数、字符以及能输入计算机中并被计算机处理的符号的集合。
数据元素(data element)是数据的基本单位。
数据对象(data object)是具有相同性质的数据元素的集合,是数据的一个子集。
2.数据结构包含的内容
一般包括以下三个方面的内容:
1)数据的逻辑结构
数据的逻辑结构可分为线性结构和非线性结构。
线性结构特征:数据元素(结点)之间存在着一对一的关系,且结构中仅有一个开始结点和一个终端结点,其余结点都是仅有一个直接前趋和一个直接后继。
非线性结构特征:数据元素之间存在着一对多或多对多的关系,即一个结点可能有多个直接前趋和多个直接后继。该结构包括树形结构、图形结构和网状结构等。
2)数据的存储结构(物理结构)
数据的存储结构可以用以下四种基本的存储方法实现:
① 顺序存储方法。它是把逻辑上相邻的结点存储在物理位置上也相邻的连续存储单元里,由此得到的存储结构称为顺序存储结构。它通常借助于程序设计语言中的数组来描述。
② 链接存储方法。它是用一组不一定连续的存储单元存储逻辑上相邻的元素,元素间的逻辑关系由附加的指针域表示,由此得到的存储结构称为链式存储结构。它通常借助于程序设计语言中的指针来描述。
③ 索引存储方法。它通常是在存储元素信息的同时,还建立附加的索引表。表中索引项一般形式是:(关键字,地址)。关键字是能唯一标识一个元素的一个数据项或多个数据项的组合。
④ 散列存储方法。它的基本思想是根据元素的关键字直接计算出该元素的存储地址。
3)数据的运算
常用的运算有:检索、插入、删除、更新、排序等。其实也就是增删改查这几个操作。
补充概念:
数据类型(data type)是一个值的集合和定义在这个值集上的一组操作的总称。在高级程序设计语言中,每个变量、常量或表达式都有一个它所属的数据类型。数据类型规定了变量或表达式可能的取值范围以及所允许的操作运算。
抽象数据类型(Abstract Data Type,ADT)是抽象数据的组织和与之相关的操作。它的特点是将数据定义和数据操作封装在一起,使用户程序只能通过ADT中定义的某种操作来访问数据。说直白点就是抽象数据类型类似于Java中的类。
二、算法的描述和分析
1.算法描述
算法是由若干条指令组成的有穷序列,其中每条指令表示一个或多个操作。通俗地说,一个算法就是一种解题的方法。
算法必须满足的五个准则:
- 输入。算法开始前必须给算法中用到的变量初始化,一个算法的输入可以包含零个或多个数据。
- 输出。算法至少有一个或多个输出。
- 有穷性。算法必须在执行有限步后结束。
- 确定性。算法中每一条指令的含义都必须明确,无二义性。
- 可行性。算法中描述的操作都可以通过有限次的基本运算来实现。
2.算法分析
如何来评价算法的优劣呢?应主要考虑如下几点:
(1)执行算法所耗费的时间,即时间复杂性。(这点是最主要的)
(2)执行算法所耗费的存储空间,主要是辅助空间,即空间复杂性。
(3)算法应易于理解、易于编程,易于调试等,即可读性和可操作性。
ps:博主创作不易,如果喜欢就点个赞吧!ღ( ´・ᴗ・` )比心