数据结构-绪论

绪论

️概念,特性,设计要求

数据结构+算法=程序

数据类型

数据类型是一个值的集合和定义在此集合上的一组操作的总称,其分为:

  • 原子类型:其值不可再分。
  • 结构类型:其值可再分解为若干成分。
  • 抽象数据类型:抽象数据组织以及相关操作。

易错题:

1.可以用( )定义一个完整的数据结构。 答案

A.数据元素 B.数据对象 C.数据关系 D.抽象数据类型

数据结构

数据结构包括三方面的内容:

  1. 逻辑结构:线性结构(线性表)、非线性结构(集合、树和图)
  2. 存储结构:
    1. 顺序存储:
      1. 定义:将逻辑上相邻的元素存储在物理位置相邻的存储单元中。
      2. 优点:实现随机存取、每个元素占用最少的存储空间。
      3. 缺点:只能使用相邻的一整块存储单元,可能产生较多外部碎片。
    2. 链式存储
      1. 定义:借助指示元素存储地址的指针来表示元素的逻辑关系。
      2. 优点:无碎片现象,能充分利用所有存储单元。
      3. 缺点:每个元素的存储指针额外占用存储空间,且只能顺序存取。
    3. 索引存储
      1. 定义:存储元素的同时,建立附加的索引表。
      2. 优点:检索速度快
      3. 缺点:索引表占用额外空间,增删数据修改索引表的时间开销大。
    4. 散列存储
      1. 定义:根据元素的关键字直接计算出该元素的存储地址,又称哈希存储
      2. 优点:检索、增加和删除节点的操作很快
      3. 缺点:若散列函数不好,可能出现存储单元冲突,解决冲突会增加时间和空间的开销。
  3. 数据的运算。

逻辑结构和存储结构关系密切,算法的设计取决于所决定的逻辑结构,而算法的实现依赖于所采用的存储结构(逻辑 结构从逻辑关系上描述数据,从面向问题的实际角度出发,只采用抽象表达方式,因此可以说它独立于存储结构

易错题:

2 .以下属于逻辑结构的是( ) 答案

A.顺序表 B.哈希表 C.有序表 D.栈

3 .以下与数据的存储结构无关的术语是( ) 答案

A.循环队列 B.链表 C.哈希表 D.栈

算法概念

特性

  1. 有穷性 在有限步骤后结束
  2. 确定性 每一步必须确切定义,不能产生二义性
  3. 可行性 可行的
  4. 输入 有零个或多个输入
  5. 输出 一个或多个输出

设计要求

  1. 正确性 满足具体问题需求
  2. 可读性 好读,利于理解
  3. 健壮性 有容错处理,能对非法数据作出反应
  4. 效率与储存量需求 与问题规模有关

截图

‍算法度量与分析

算法效率的度量是通过时间复杂度和空间复杂度来描述的。

时间复杂度T(n)

一般指的是最坏情况下时间复杂度,以保证算法的运行时间不会比他更长。

频度是指该语句被重复执行的次数,所有的频度之后记为T(n),算法的时间复杂度记为:T(n) = O(f(n)),其中n为问题规模。

#define MAX 20

void matrixAdd(int n, int A[MAX][MAX], int B[MAX][MAX], int C[MAX][MAX]) {
    int i,j,k;
    for(i=0; i<n; i++){							//频度(基本运算):n
        for (j=0; j < n; j++){					//频度:n^2
            C[i][j] = A[i][j] + B[i][j];		//频度:n^2
        }
    }
}

例子中所有语句的频度之和为:

T(n)= n + n^2 + n^2 = 2n^2 + n

截图

  • 渐进式时间复杂度:只求出T(n)的最高阶,忽略其低阶项和常系数,可以简化T(n)的计算,客观反映当n很大时算法的时间性能

截图

如果没有循环结构,则时间复杂度为O(1),如下:

截图

简化的算法时间复杂度分析

截图

  • 如果有循环结构,则分析最深层循环中的语句的循环次数.
  • 如果循环次数不明显,采用设未知数x来求时间复杂度:

截图

最好,最坏时间复杂度分析;

截图

平均时间复杂度分析:

  • n个数据排序共有n!种输入情况,则在等概率情况(每种情况的概率为1/n!)下的平均时间复杂度为:
  • 其中_pi表示查找第i个元素的概率,fi_表示查找第i个元素的比较次数

​​

答案

1

D .抽象数据类型:描述了数据的逻辑结构和抽象运算,通常用(数据对象、数据关系、基本操作集)这样的三元组来表示,从而构成一个完整的数据结构定义。

2

C.有序表 是指关键字有序的线性表,仅描述元素间的逻辑关系,既可以链式存储又可以顺序存储,故属于逻辑结构。A、B、C既描述逻辑结构又描述存储结构和数据运算。

3

D.栈:是一种抽象数据类型,可采用顺序存储或链式存储,只表示逻辑结构。循环队列是用顺序表表示的队列,是一种数据结构。

posted @ 2024-03-06 18:29  lockly  阅读(5)  评论(0编辑  收藏  举报