Skip to content

Latest commit

 

History

History
66 lines (40 loc) · 3.63 KB

File metadata and controls

66 lines (40 loc) · 3.63 KB

序言

一、概述

《数据结构》这门课程大多时候等同于《数据结构与算法》,所以我们一般说数据结构,都会涉及到算法。《数据结构》这门课程要求学生根据所学的数据结构理论,能完成复杂的程序设计。而程序设计能力的提高,必须要有学习、观摩、借鉴和实践的过程。

1.1 数据结构与算法的概念

我们把现实中复杂的问题以特定的数据类型(现实中的个体)和特定的存储结构(现实中个体之间的关系)保存在计算机内存中,我们把这种“特定的存储结构”叫做数据结构。在此数据结构的基础之上为实现的某个功能(比如查找、删除、排序)而执行的相应操作叫做算法。

我们可以简单理解为:数据结构 = 个体 + 个体的关系,算法 = 对存储数据的操作。

1.2 衡量算法的标准

通过 1.1,我们把处理数据的方法和步骤叫做算法。而衡量算法的标准包括以下几个方面:

  • 时间复杂度:程序大概要执行的次数,而非执行的时间
  • 空间复杂度:算法执行过程中,大概占用的最大的内存
  • 难易程度
  • 健壮性

算法最核心的内容是研究算法的时间复杂度和空间复杂度。

1.3 数据结构在程序开发中的地位

数据结构是软件工程中最核心的课程。在实际程序开发中,我们会使用各种编程语言,对各种数据进行相应的功能操作,如存储、查询、删除,或是更复杂的运算。所以数据结构功底在一定程度上,决定了个人在程序开发上的综合能力。

我们可以理解为:程序 = 数据的存储 + 数据的操作(也就是算法) + 可以被计算机执行的语言。

1.4 大O分析法

大O分析法是用来描述算法的性能或复杂度的表示法,主要衡量算法在最坏情况下的时间或空间需求。它通过表示算法的增长速率来评估其效率,而不关心具体的常数因子或低阶项。帮助我们忽略不重要的细节,专注于算法的表现。

大O分析法中的“O”来自数学中的“Order”(阶)的概念,表示增长的“数量级”或“规模”。它用来描述函数的渐近行为,即当输入规模无限增大时,算法的执行时间或空间消耗如何随之变化。

大O表示法的核心思想是:

  1. 时间复杂度:描述随着输入规模(n)的增加,算法所需的执行时间如何增长。
  2. 空间复杂度:描述算法随着输入规模增加所需的内存增长情况。

常见的大O符号:

  • O(1): 常数时间,不管输入规模多大,执行时间始终相同。
  • O(log n): 对数时间,算法的执行时间随着输入规模的对数增长。
  • O(n): 线性时间,执行时间与输入规模成正比。
  • O(n log n): 线性对数时间,常用于高效排序算法(如归并排序、快速排序)。
  • O(n²): 平方时间,执行时间与输入规模的平方成正比,常见于一些简单的排序算法(如冒泡排序)。
  • O(2^n): 指数时间,随着输入规模增加,执行时间成指数增长,效率极低。

通过大O分析法,开发者可以估计算法在不同输入条件下的表现,选择最合适的算法。

二、基本的数据结构

为了方便我们今后的学习,本文列出数据结构的基础知识模块如下

2.1 线性结构(线性表)

  • 连续存储(顺序表)
  • 离散存储(链表)
  • 线性结构的两种常见应用之一------栈
  • 线性结构的两种常见应用之二------队列

2.2 非线性结构