数据结构绪论

整本书的知识点,点击右方链接整本书笔记知识点

 
 

 

一、绪论

1.1、数据结构的研究内容

  1. 数据的各种逻辑结构和物理结构,以及他们之间的相应关系
  2. 对每种结构定义相适应的各种运算
  3. 设计出相应的算法
  4. 分析算法的效率

1.2、基本概念和术语

1.2.1、数据、数据结构、数据项和数据对象

在这里插入图片描述

 

根据例子理解:假设有两张表,上表为人员表,下表为课程表, 表的格式如下:

姓名性别身高课程代号
小明180A
小红180A
小绿180B
课程代号课程名
A语文
B数学

这两张表就是数据
而单独的一张表就称为数据对象,即人员表是一个数据对象,课程表也是一个数据对象
而每张表中的每一行就称为数据元素
而姓名,性别,身高,课程代号,课程名就称为数据项

 

1.2.2数据结构

数据结构包括逻辑结构和存储结构两个层次。

数据结构是相互之间存在一种或者多种特定关系的数据元素的集合 

a、逻辑结构

逻辑结构分为四种类型:集合结构,线性结构,树形结构,图形结构。

集合结构:数据元素同属一个集合,单个数据元素之间没有任何关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4zzJGWwu-1604820044558)(images/20201107113322490.png)]

线性结构:类似于线性关系,线性结构中的数据元素之间是一对一的关系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xcX4kHLt-1604820044561)(images/20201107113349349.png)]

树形结构:树形结构中的数据元素之间存在一对多的关系。(各元素及元素关系所组成图形类似于树状图)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1iwm9J6-1604820044565)(images/2020110711340070.png)]

图形结构:数据元素之间是多对多的关系。如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WetcYd94-1604820044567)(images/20201107113413856.png)]

 

b、存储结构(物理结构)

物理结构又叫存储结构,分为两种,一种是顺序存储结构一种是链式存储结构。
 

(1)、顺序存储结构

顺序存储结构是把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的。之前学习的数组就是一种顺序存储结构。(如图所示)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Md4Jd1I6-1604820044569)(images/20201107113434453.png)]

 

(2)、链式存储结构

链式存储结构:是把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的也可以是不连续的

根据指针找出相邻元素的位置
在这里插入图片描述

 

1.2.3、数据类型和抽象数据类型

a、数据类型

一般包括整型、实型、字符型等原子类型外,还有数组、结构体和指针等结构类型。
 

b、抽象数据类型

抽象数据类型(Abstract Data Type,ADT),类似C语言中的结构体以及C++、java语言中的类。

通俗的讲,抽象数据类型,泛指除基本数据类型以外的数据类型。

 

1.3、抽象数据类型的表示与实现

抽象数据类型的概念与面向对象的思想是一致的。

 

1.4、算法和算法分析

算法 + 数据结构 = 程序
 

1.4.1、算法的定义及特性

 
算法是为了解决某类问题而规定的一个有限长的操作序列。
 
一个算法必须满足以下五个重要特性: 有穷性确定性可行性输入输出
 

1.4.2、评价算法优劣的基本标准

正确性可读性健壮性高效性
 

1.4.3、算法的时间复杂度

详细可以看这个:一套图搞懂“时间复杂度”
 

看下列代码的时间复杂度:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ozjmldFC-1604820044571)(images/20201107113605227.png)]

最好、最坏和平均时间复杂度

  1. 最好时间复杂度,指的是算法计算量可能达到的最小值。
  2. 最坏时间复杂度,指的是算法计算量可能达到的最大值。
  3. 平均时间复杂度,是指算法在所有可能情况下,按照输入实例以等概率出现时,算法计算量的加权平均值。
     

1.4.4、算法的空间复杂度

空间复杂度只需要分析辅助变量所占的额外空间。

空间复杂度:S(n) = O(f(n))

如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)
举例:

int i = 1;
int j = 2;
++i;
j++;
int m = i + j;

代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)

我们再看一个代码:

int []m = new int[n];
    for (i = 1; i <= n; ++i) {
        j = i;
        j++;
    }

这段代码中,第一行new了一个数组出来,这个数据占用的大小为n,这段代码的2-5行,虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)

第一章总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sj3ANZIY-1604820044572)(images/20201107123513793.jpg)]

 

数据,数据对象和数据元素、数据项的关系如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JbbYJOEX-1604820044573)(images/20201107113623372.png)]

 

数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。同样是结构,从不同角度来讨论,会有不同的分类,如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2q352GF-1604820044574)(images/20201107113637948.png)]

 
算法是为了解决某类问题而规定的一个有限长的操作序列。

算法具有五个特性:有穷性、确定性、可行性、输入和输出。

一个算法的优劣应该从以下四方面来评价:正确性、可读性、健壮性和高效性。

算法分析的重点方面是分析算法的时间复杂度
 

第一章课后习题

1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
 
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、结点、记录等。
 
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
 
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
 
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
 
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
 
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
 
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。每个学生基本信息记录
对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继。学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构。
 
这些学生记录在计算机中的存储表示就是存储结构。如果用连续的存储单元(如用数组表示)来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行链接,则称为链式存储结构。
 
即相同的逻辑结构,可以对应不同的存储结构。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

(1)集合结构

数据元素之间除了“属于同一集合”的关系外,别无其他关系。例如,确定一名学生是否为班级成员,只需将班级看做一个集合结构。
 
(2)线性结构

数据元素之间存在一对一的关系。例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构。
 
(3)树结构

数据元素之间存在一对多的关系。例如,在班级的管理体系中,班长管理多个组长,每位组长管理多名组员,从而构成树形结构。
 
(4)图结构或网状结构

数据元素之间存在多对多的关系。例如,多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图形结构或网状结构。
 
其中树结构和图结构都属于非线性结构。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eE1QqIqg-1604820044575)(images/20201107113741298.png)]

4.存储结构由哪两种基本的存储方法实现?

(1)顺序存储结构
 
顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
 
(2)链式存储结构
 
顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述。

5.选择题

(1)在数据结构中,从逻辑上可以把数据结构分成( )。

A.动态结构和静态结构 B.紧凑结构和非紧凑结构

C.线性结构和非线性结构 D.内部结构和外部结构

答案:C

(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的( )。

A.存储结构 B.存储实现

C.逻辑结构 D.运算实现

答案:C

(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。

A.数据具有同一特点

B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致

C.每个数据元素都一样

D.数据元素所包含的数据项的个数要相等

答案:B

(4)以下说法正确的是( )。

A.数据元素是数据的最小单位

B.数据项是数据的基本单位

C.数据结构是带有结构的各数据项的集合

D.一些表面上很不相同的数据可以有相同的逻辑结构

答案:D

解释:数据元素是数据的基本单位,数据项是数据的最小单位,数据结构是带有结构的各数据元素的集合。

(5)算法的时间复杂度取决于( )。

A.问题的规模 B.待处理数据的初态

C.计算机的配置 D.A和B

答案:D

解释:算法的时间复杂度不仅与问题的规模有关,还与问题的其他因素有关。如某些排序的算法,其执行时间与待排序记录的初始状态有关。为此,有时会对算法有最好、最坏以及平均时间复杂度的评价。

(6)以下数据结构中,( )是非线性数据结构

A.树 B.字符串 C.队列 D.栈

答案:A

6.试分析下面各程序段的时间复杂度。

(1)

x = 90;
y = 100;

    while (y > 0) {

        if (x > 100) {
            x = x - 10;
            y--;
        } else x++;
    }

答案:O(1)

解释:程序的执行次数为常数阶。

(2)

  for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            a[i][j] = 0;
        }
    }

答案:O(m*n)

解释:语句a[i] [j]=0; 的执行次数为m*n。

3)

s = 0;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            s += B[i][j];
            sum = s;
        }
    }

答案:O(n2)

解释:语句 s+=B[i] [j]; 的执行次数为n2

(4)

 i = 1;
    while (i <= n) {
        i = i * 3;
    }

答案:O(log3n)

解释:语句i=i*3;的执行次数为log3n (有关对数公式:如果ax = N,记做 x = logaN)

设 i = i*3 执行了 x 次,则 3x = n ;故 x = log3n

(5)

 x = 0;
    for (i = 1; i < n; i++) {
        for (j = 1; j <= n - i; j++) {
            x++;
        }
    }

答案:O(n2)

解释:语句x++;的执行次数为 n-1+n-2+……+1= n(n-1)/2。

i = 1 时,循环执行 n-1 次

i = 2 时,循环执行 n-2 次,

i = 3 时,循环执行 n-3 次,

i = n-1 时,循环执行 1 次

则相加: (n-1)+(n-2)+(n-3)+…+3+2+1 = n(n-1)/2

一共有 n-1 个式子,前后相加等于 n ,则总和为 n(n-1)/2

(6)

x = n; //n>1
y = 0;

    while (x≥(y + 1) * (y + 1)){
        y++;
    }

答案:O( n \sqrt{n} n )

解释: x≥(y+1)*(y+1) = n≥(y+1)2

开根号: n ≥ ( y + 1 ) \sqrt{n}≥(y+1) n (y+1)

n − 1 ≥ y \sqrt{n}-1≥y n 1y

y ≤ n − 1 y≤\sqrt{n}-1 yn 1

x=n; //n>1

y=0;

while( y ≤ n − 1 y≤\sqrt{n}-1 yn 1){

​ y++;
}

y++;执行了 n \sqrt{n} n 次。则时间复杂度为:O( n \sqrt{n} n )

  • 166
    点赞
  • 486
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值