学习目录:

程序=数据结构+算法

1.数据、数据元素、数据项和数据对象

2.数据结构

3.数据类型和抽象数据类型

4.算法及算法分析


学习内容:

程序=数据结构+算法

数据结构:如何用数据正确地描述现实世界的问题,并存入计算机

算法:如何高效地处理这些数据,以解决实际问题

1.数据、数据元素、数据项和数据对象

(1)数据(Data):是客观事物的符号表示,是所有能输入计算机中并能够被计算机程序处理的符号的总称。如:整数、实数、字符、字符串及多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。

(2)数据元素(Data Element):是数据的基本单位,数据元素用于完整地描述一个对象,如图中的一个顶点,树中棋盘的一个状态。

(3)数据项(Data Item):是组成数据元素的、有独立含义的、不可分割的最小单位。如:学生表中的学生姓名,学号等都是数据项。

(4)数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。如:C={‘A’,‘B’,‘C’,‘a’,‘b’,‘c’}。

2.数据结构

含义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”指数据元素之间存在的关系。数据结构包括逻辑结构和存储结构。

(1)逻辑结构:数据结构的逻辑结构有两个要素:一是数据元素;二是关系,关系是指数据元素间的逻辑关系。根据数据元素之间关系的不同特性,数据的逻辑结构通常有:

下面4种结构中所举的示例是以某班级学生作为数据对象(数据元素是学生的学籍档案记录),来分别考察数据元素之间的关系。

  • 集合结构:数据元素之间除了“属于同一集合”的关系外,别无其他关系。例如:确定一名学生是否为班级成员,只需将班级看作一个集合结构。
  • 线性结构:数据元素之间存在一对一的关系。例如:将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构。
  • 树结构:数据元素之间存在一对多的关系。例如:在班级的管理体系中,班长管理多个组长,每位组长管理多名组员,从而构成树结构。
  • 图结构或网状结构:数据结构之间存在多对多的关系。例如:多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图结构或网状结构。

其中,集合结构、树结构、图结构或网状结构都属于非线性结构。

线性结构:线性表、栈和队列、字符串、数组、广义表;

非线性结构:树结构(树和二叉树),图结构(无向图和有向图),集合结构。

(2)存储结构:数据对象在计算机中的存储结构表示称为数据的存储结构,也称为物理结构。数据的存储结构分为:

  • 顺序存储结构:是把逻辑上相邻的结点存储在物理上相邻的存储单元里,结点之间的关系有存储单元的邻接关系来体现。其优点是占用最少的存储空间;其缺点是由于只能使用相邻的一整块存储单元,因此可能产生较多的碎片现象。
  • 链式存储结构:将结点所占的存储单元分为两部分,一部分存放结点本身的信息,即为数据项;另一部分存放该结点的后继结点所对应的存储单元的地址,即为指针项。其优点是不会出现碎片现象,充分利用所有的存储单元;其缺点是每个结点占用较多的存储空间。
  • 索引存储结构:用结点的索引号来确定结点的存储地址。其优点是检索速度快。其缺点是增加了附加的索引表,会占用较多的存储空间;另外在增加和删除数据时由于要修改索引表因而会花费较多时间。
  • 散列存储结构:根据结点的值确定它的存储结构。其优点是检索、增加和删除结点的操作都很快;其缺点是采用不好的散列函数时可能会出现结点存储单元的冲突,为解决冲突需要附加的时间和空间开销。

若采用顺序存储结构,则各个元素在物理上必须是连续的;若采用非顺序存储结构,则各个元素在物理上可是是离散的。

数据的存储结构会影响存储空间分配的方便程度。

数据的存储结构会影响对数据运算的速度。

(3)数据运算:施加于数据的操作。如对一张表格的查找、增加、修改、删除记录的工作。运算不仅仅是加减乘除,还包括算法。算法的实现是与数据的存储结构密切相关的。

运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。

3.数据类型和抽象数据类型

(1)数据类型:是一个值的集合和定义在此集合上的一组操作的总称。

  • 原子类型:其值不可再分的数据类型。布尔类型:TRUE,FALSE,可进行操作:与、或、非...;int类型:-2147483648~2147483647,可进行操作:加、减、乘、除、模运算...
  • 结构类型:其值可以再分解为若干成分(分量)的数据类型。如结构体

(2)抽象数据类型(ADT):一般指用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括3个部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。

定义一个抽象数据类型就是在“定义”一种数据结构;确定了抽象数据类型的存储结构,才能“实现”这种数据结构。

4.算法及算法分析

(1)算法的定义:为解决某类问题而规定的一个有限长的操作序列。(换一种说法则是对特定问题求解步骤的一种描述)例如:要解决的问题是做番茄炒蛋,食材则是数据结构,步骤则为算法。

(2)算法的特性:

  • 有穷性:一个算法必须总是在执行有穷步骤后结束,且每一步都必须在有穷时间内执行。注:算法必须是有穷的,而程序可以是无穷的。
  • 确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
  • 可行性:算法中的所有操作都可以通过将已经实现的基本操作运算执行有限次来实现。
  • 输入:一个算法有0个或多个输入。当用函数描述算法时,输入往往是通过形参表示的,在它们被调用时,从主函数获得输入值。
  • 输出:一个算法有1个或多个输入。当用函数描述算法时,输出多用返回值或引用类型的形参表示。

算法可以没有输入但一定要有输出。

(3)“好”算法的特性:

  • 正确性:在有限的运行时间内得到正确的结果。
  • 可读性:便于人们理解,如注释。
  • 健壮性:当输入非法数据时,算法能适当的做出反应或进行处理,而不会产生莫名其妙的输出结果。
  • 高效性:高效率(花的时间少,时间复杂度低)与低存储量需求(不费内存,空间复杂度低)

(4)时间复杂度  T(n)=O(f(n))

衡量算法效率的方法有事后统计法和事前分析估算法(常用)

问题规模:不考虑计算机的软硬件等环境因素,影响算法时间代价的最主要因素是问题的规模。

语句频度:一条语句重复执行的次数。

一个算法的执行时间大致上等于其所有语句执行时间的总和,而语句的执行时间则为该条语句的重复执行次数和执行一次所需时间的乘积。

常见的时间复杂度按数量级递增排队一次为:

如何计算步骤:

  • 找到一个基本操作(最深层循环)
  • 分析该基本操作的执行次数 x 与问题规模 n 的关系 x=f(n)
  • x的数量级 O(x)就是算法时间复杂度 T(n)

例:1:常量阶示例

{x++;s=0;
}

两条语句频度均为 1,算法的执行时间是一个与问题规模 n 无关的常数,所以算法的时间复杂度为T(n)= O(1),称为常量阶。

实际上,如果算法的执行时间不随问题规模n的增长而增长,算法中语句频度就是某个常数。即使这个常数再大,算法的时间复杂度都是O(1)。例如,对上面的程序进行如下改动:

for(i=0;i<10000;i++)
{x++;s=0;
}

算法的时间复杂度仍然为O(1)。

例2:线性阶示例

for(i=0;i<n;i++)
{x++;s=0;
}

循环体内两条基本语句的频度均为n)=n,所以算法的时间复杂度为T)= O),称为线性阶

例3:平方阶示例

x=0;y=0;
for(k=1;k<=n;k++)
x++;
for(i=l;i<=n;i++)
for(j=1;j<=n;j++)
y++;

对循环语句只需考虑循环体中语句的执行次数,以上程序段中频度最大的语句是(6),其频度为(n)=n^2,所以该算法的时间复杂度为T(n)= O(n^2),称为平方阶。
例4:立方阶示例

x=1;
for(i=l;i<=n;i++)for(j=l;j<=i;j++)for(k=1;k<=j;k++)x++;

则该算法的时间复杂度为T(n)= 0(n^3),称为立方阶

例5:对数阶示例

for(i=1;i<=n;i=i*2)
{x++;s=0;
}

算法的时间复杂度为T(n)= O(log2^n),称为对数阶。

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

算法所需存储空间的量度,也是问题规模n的函数。

例1:数组逆序,将一维数组a中的n个数逆序存放在原数组中

算法1:

for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;
}

仅需要借助一个变量t就可以实现,与问题规模n大小无关,所以空间复杂度是O(1)。

算法2:

for(i=0;i<n;i++)b[i]=a[n-i-1];
for(i=0;i<n;i++)a[i]=b[i];

需要另外借助一个大小为n的辅助数组b,所以空间复杂度为O(n)。

注:算法分析的两个主要方面是算法的时间复杂度和空间复杂度,以考察算法的时间和空间效率。一般情况下,鉴于运算空间较为充足,故将算法的时间复杂度作为分析的重点。

数据结构(C语言版)——绪论相关推荐

  1. 为什么C语言是非形式化的,《数据结构C语言版》——绪论

    <数据结构C语言版>--绪论<笔记> 一.基本概念和术语 1.数据,数据元素, 数据项,数据对象 数据:是客观事物的符号表示,是所有能够输入到计算机中并被计算机程序处理的符号的 ...

  2. 23V3有这种C语言表达式吗,数据结构(C语言版第2版_李云清)习题答案2012-12.doc

    数据结构(C语言版第2版_李云清)习题答案2012-12.doc 第 1 章 绪论 1.1 什么是数据结构? [答]:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储 于计算 ...

  3. 数据结构c语言版第16页,数据结构c语言版

    数据结构c语言版[编辑] 概述 <数据结构C语言版>本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的各种实现方法及综合分析比较 出版信息 ...

  4. 数据结构c语言版习题

    数据结构c语言版习题 文章目录 第一章 绪论 第二章 线性表 第四章 串 第五章数组和广义表作业 第六章 树与二叉树理论作业 第七章图作业 第八章查找作业 第一章 绪论 一.选择题 1.以下说法正确的 ...

  5. c语言第二版课后答案pdf,数据结构(C语言版)第2版习题答案—严蔚敏.pdf

    数据结构( C语言版) (第2版) 课后习题答案 李冬梅 2015.3 目 录 第 1 章 绪论 1 第 2 章 线性表 5 第 3 章 栈和队列 14 第 4 章 串.数组和广义表 27 第 5 章 ...

  6. c语言数据结构考研试题,数据结构C语言版考研复习题.doc

    数据结构C语言版考研复习题 第一章 绪论1.1 简述下列概念:数据.数据元素.数据类型.数据结构.逻辑结构.存储结构.线性结构.非线性结构.1. 常用的存储表示方法有哪几种? 1. 算法的时间复杂度仅 ...

  7. 数据结构c语言程序题,严蔚敏《数据结构(c语言版)习题集》(包括基础部分).doc...

    严蔚敏<数据结构(c语言版)习题集>(包括基础部分).doc 线性表第1章绪论11简述下列术语数据,数据元素.数据对象.数据结构.存储结构.数据类型和抽象数据类型.解数据是对客观事物的符号 ...

  8. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  9. C语言中链表的英文名字,数据结构C语言版 循环链表表示和实现(国外英文).doc

    数据结构C语言版 循环链表表示和实现(国外英文) 数据结构C语言版 循环链表表示和实现(国外英文资料) Data structure, C language, circular list repres ...

  10. 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)

    2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...

最新文章

  1. 卷积神经网络CNN——图像卷积与反卷积(后卷积,转置卷积)
  2. centos 编译 mysql_centos 编译安装mysql
  3. java类与对象的最初理解
  4. pythondevp2p_以太坊GO、JAVA、PYTHON、RUBY、JS客户端介绍
  5. 你对ES6究竟了解多少?—— 有这一篇就够用了
  6. 第 10 章 数组和指针
  7. tslib-1.4.tar.gz安装和配置
  8. C++算法学习(力扣:201. 数字范围按位与)
  9. 用puttygen转换腾讯云密匙找不到文件
  10. 关于Kotlin循环遍历需要注意索引越界的问题
  11. 最新最全的vue面试题+详细解答
  12. GL_DITHER 抖动算法
  13. Design Compiler工具学习笔记(6)
  14. [算法]Morse Code(摩斯密码)
  15. linux程序后台运行详解
  16. ES6 Proxy 和 Reflect 的理解
  17. 《自学是门手艺》— 为什么要把编程当成自学的入口
  18. CherryTree安装和简单设置
  19. [解决]尝试安装时出现“无法安装 Office(64 位或 32 位)”错误
  20. 复材铺层机器人_航空工业复材自动铺丝技术

热门文章

  1. 2021考研政治腿四错题、重点题汇总
  2. 菩提树下都是宝,大家学习要趁早,不懂多问为什么,这种态度才算好
  3. cortana android 地图,地图-系统爱好者
  4. Springboot毕设项目绩效考核管理系统m29awjava+VUE+Mybatis+Maven+Mysql+sprnig)
  5. 第八篇,字符数组和字符指针详细讲解。
  6. 【例8-13】用字符指针操作字符串
  7. STI、LOD与WPE概念2:减少或避免WPE/STI效应对IP模块设计的影响
  8. Fast 22 HTMFS: Strong Consistency Comes for Free with Hardware Transactional Memory in Persistent...
  9. GHOST系统封装教程 系统封装工具 XP系统封装(三)
  10. 有赚一亿的欲望,却只有一天的耐心。