数据结构绪论(2)

目录

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

一、数据类型

 二、抽象数据类型(ADTs:Abstract Data Types)

ADT常用定义格式:

​编辑

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

抽象数据类型的定义

 抽象数据类型的表示

抽象数据类型的实现

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

1.4 算法与算法分析

一、算法和算法分析

 1.算法的特性:

2.算法的评价:

3.算法的效率的度量

二、时间复杂度的渐进表示法:

n * n阶矩阵加法:

 三、分析算法时间复杂度的基本方法

四、时间复杂度是由嵌套最深层语句的频度决定的 

 五、渐进空间复杂度

 小结

1.数据、数据元素、数据项、数据结构等基本概念

2.对数据结构的两个层次的理解

        逻辑结构

        存储结构

3.抽象数据类型的表示方法

4.算法、算法的时间复杂度及其分析的简易方法


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

一、数据类型

 数据类型是一组性质相同的值的集合,以及定义于这个集合上的一组运算的总称。

#include <iostream>
using namespace srd;
int main()
{
    int x,y,m;  //float x,y,m;
    cin>>x>>y;
    m = x % y;
    cout<<m<<endl;
    return 0;
}

 二、抽象数据类型(ADTs:Abstract Data Types)

1.更高层次的数据抽象

2.由用户定义,用以表示应用问题的数据模型

3.由基本的数据类型组成,并包括一组相关的操作

抽象数据类型可以用以下三元组来表示:
ADT = (D,S,P)

D:数据对象

S:D上的关系集

P:D上的操作集

ADT常用定义格式:


 

 

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

1.抽象数据类型可以通过固有的数据类型(如整型、实型、字符型等)来表示和实现

2.它有类似C语言中的结构(struct)类型,但增加了相关的操作

3. 教材中用的是类C语言(介于伪码和C语言之间)作为描述工具

抽象数据类型的定义

 抽象数据类型的表示

 

抽象数据类型的实现

 

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

(1)预定义常量及类型

//函数结果状态代码
#define OK 1
#define ERROR 0
#define OVERFLOW -2
 
//Status 是函数返回值类型,其值是函数结果状态代码
typedef int Status

(2)数据元素被约定为ElemType类型,用户需要根据具体情况,自行定义该数据类型。

(3)算法描述为以下的函数形式:

        函数类型  函数名(函数参数表)

        {

           语句序列;

        }

(4)内存的动态分配与释放

        使用new和delete动态分配和释放内存空间

        分配空间  指针变量=new数据类型

        释放空间  delete指针变量

(5)赋值语句

(6)选择语句

(7)循环语句 

(8)使用的结束语句形式有:

        函数结束语句  return

        循环结束语句  break

        异常结束语句  exit(异常代码)

(9)输入输出语句形式有:

        输入语句  cin(scanf)

        输出语句  cout(printf)

(10)扩展函数有:

        求最大值 max

        求最小值 min

1.4 算法与算法分析

一、算法和算法分析

 1.算法的特性:

输入:有0个或多个输入

输出:有一个或多个输出(处理结果)

确定性:每步定义都是确切、无歧义的

有穷性:算法应在执行有穷步后结束

有效性:每一条运算应足够基本

2.算法的评价:

正确性      可读性      健壮性      高效性:时间代价,空间代价

3.算法的效率的度量

用依据该算法编制的程序在计算机上执行所消耗的时间来度量

事后统计       事前分析估计

(1)事后统计:利用计算机内的计时功能,不同算法的程序可以用一组或多组相同的统计数据区分。

缺点:必须先运行依据算法编制的程序。

           所得时间统计量依赖于硬件、软件等环境因素,掩盖算法本身的优劣。

(2)事前分析估计:

一个高级程序在计算机上运行所消耗的时间取决于:

  • 依据的算法选用何种策略
  • 问题的规模
  • 程序语言
  • 编译程序产生机器代码质量
  • 机器执行指令速度

同一算法用不同的语言、不同的编译程序、在不同的计算机上运行,效率均不同,——使用绝对时间单位衡量算法效率不合适

二、时间复杂度的渐进表示法:

算法中基本语句重复次数执行的次数是问题规模n的某个函数f(n)

算法的时间度量记作:T(n)=O(f(n))

表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相同,称渐进时间复杂度。

 

 

  • 算法中重复执行次数和算法的执行时间成正比的语句
  • 对算法运行时间的贡献最大
  • n越大算法的执行时间越长

排序:n为记录数

矩阵:n为矩阵的阶数

多项式:n为多项式的项数

集合:n为元素个数

树:n为树的节点个数

图:n为图的顶点数或边数

n * n阶矩阵加法:

for(i=0;i<n;i++)
    for(j=0;j<n;j++)
        c[i][j]=a[i][j]+b[i][j];

 三、分析算法时间复杂度的基本方法

  • 找出语句频度最大的那条语句作为基本语句
  • 计算基本语句的频度得到问题规模n的某个函数f(n)
  • 取其数量级用符号“O”表示

四、时间复杂度是由嵌套最深层语句的频度决定的 

 

 

 

 

 有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同

 

 

 五、渐进空间复杂度

 

 小结

1.数据、数据元素、数据项、数据结构等基本概念

2.对数据结构的两个层次的理解

        逻辑结构

        存储结构

3.抽象数据类型的表示方法

4.算法、算法的时间复杂度及其分析的简易方法

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shining0596

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值