数据结构与算法(一)

==前言:数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。==

数据结构是相互之间存在一种或多种特定关系的数据元素的集合,我们把数据结构分为逻辑结构和物理结构。

逻辑结构是指数据对象中数据元素之间的相互关系。

分为四种:集合结构、线性结构、树形结构、图形结构。

物理结构是指数据的逻辑结构在计算机中的存储形式。

​ 分为两种:顺序存储结构、链式存储结构

抽象数据类型:是指一个数据模型及定义在该模型上的一组操作。“抽象”的意义在于数据类型的数学抽象特性。抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。

算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

​ 具有五个基本特性:输入、输出、有穷性、确定性、可行性。

​ 好的算法设计要求:正确性、可读性、健壮性、时间效率高和储存量低。

算法效率的度量方法:事后统计法(不科学、不准确)、事前分析估算法。

​ ==大O阶方法==:1.用常数1取代运行时间中的所有加法常数

​ 2.在修改后的运行次数函数中,只保留最高阶项

​ 3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数。

所得到的结果就是大O阶。

执行次数函数 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n^2^+2n+1 O(n^2^) 平方阶
5log2n+20 O(logn) 对数阶
2n+3nlog2n+19 O(nlogn) nlogn阶
6n^3^+2n^2^+3n+4 O(n^3^) 立方阶
2^n^ O(2^n^) 指数阶

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

线性表

定义:

零个或多个数据元素的有限序列。

  • 其中数据元素的个数n定义为表的长度。

  • 当n=0时称为空表

  • 非空的线性表记作:(a1,…,ai-1,ai,ai+1,…an)

    ==a1为线性起点(起始节点),an为线性终点(终端节点)==

​ ==ai-1是ai的直接前驱,ai+1是ai的直接后继,a1有且仅有一个直接后继,an有且只有一个直接前驱==

抽象表的数据类型:

线性表的顺序存储结构

顺序存储结构的插入与删除

线性表的链式存储结构

单链表的读取

单链表的插入与删除

单链表的整表创建

单链表的整表删除

单链表结构与顺序存储结构优缺点

静态链表

循环链表

双向链表

栈与队列

排序