数据结构——第一章 绪论

1.1数据结构讨论的范畴

程序设计:为计算机问题编制的一组指令。

算法:处理问题的策略。

数据结构:问题的数学模型。

 数值计算的程序设计问题

         结构静力分析计算----线性代数方程组

         全球天气预报----环流模式方程

非数值计算的程序设计问题

例1:求一组(n个)整数中的最大值

算法:基本操作---比较两个数的大小---模型

例2:计算机对弈

算法:对弈的规则和策略---模型:棋盘,黑棋白旗都由数据表示

例3:足协的数据库管理

算法:需要管理的项目,如何管理,用户界面等---模型

总结:数据结构描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中的表示和实现。

1.2基本概念

一、数据与数据结构

数据:所有能被输入到计算机中,且被计算机处理的符号的集合。计算机操作的对象的总称。是计算机处理的信息的某种特定的符号表示形式。如要处理的图像,文字,数字,音频,视频都可以称为数据。

数据元素:数据中的一个“个体”。数据结构中讨论的基本单位。

数据项:数据结构中讨论的最小单位。数据元素是数据项的集合。

     例如:远动员这个整体是数据元素。而运动员包含的信息,姓名,俱乐部名称,出生日期,参加日期,职务,业绩等都是这个数据元素分出的数据项。

数据结构:带结构的数据元素的集合。数据元素都不是孤立存在的,而是在它们之间存在某种关系,这种数据元素相互之间的关系成为结构。

               可以有次序关系,包含关系。

数据的逻辑结构可归为四类:线性结构,树形结构,图状结构,集合。

数据结构的形式定义:数据结构是一个二元组。Data_Structures=(D,S)。其中:D是数据元素的有限集,S是D上关系的有限集。

数据的存储结构(物理结构):逻辑结构在存储器中的映像。

         数据元素映像方法:用二进制位的位串表示数据元素。

         数据关系的映像方法:表示<x,y>的方法

                        顺序映像:以存储位置的相邻表示后继关系。y的存储位置和x的存储位置之间差一个常量C,而C是一个隐含值,整个存储结构只含数据元                                            素本身的信息

                         链式映像:以附加信息指针表示后继关系。

        在不同的编程环境中,存储结构可有不同的描述方法

二、数据类型

在用高级程序语言编写的程序中,必须对程序中出现的每个变量,常量,或表达式,明确说明他们所属的数据类型。

数据类型是一个值得集合和定义,在此集合上一组操作的总称。

三、抽象数据类型

是指一个数学模型以及定义在该模型上的一组操作。

 两个重要特征:用抽象数据类型描述程序处理的实体时,强调的是其本质的特征,其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)

例如:抽象数据类型复数的定义。

1.3算法效率

一、时间复杂度

例一:

for(i=1;i<=n;++i)
    for(j=1;j<=n;++j){
        c[i,j]=0;
        for(k=1;k<=n;++k)
            c[i,j]+=a[i,k]*b[k,j];
    }

这里的原操作:赋值,相加,相乘。乘法操作为基本操作。

时间复杂度:O(n^3)

例二:选择排序

void select_sort(int a[],int n){//将a中整数序列重新排列成自小至大的整数序列----选择排序
    for(i=0;i<n-1;i++){
        j=i;
        for(k=i+1;k<n;++k)
            if(a[k]<a[j]) j=k;
        if(j!=i) a[j]←→a[i]
    }
}//select_sort

控制结构:两层循环    原操作:赋值 比较 交换

基本操作:比较

          总的次数:n-1   +    n-2    +    n-3   +……+1=n*(n-1)/2

时间复杂度:O(n^2)

以上两个例子:基本操作都在循环语句中,语句的频度----语句的循环次数,所以时间复杂度,就是最深层语句的频度的函数

            且这两个例子只与问题的规模有关,与输入的数据无关。

例三:冒泡排序

void bubble_sort(int a[],int n){
//将a中整数序列重新排列成自小至大
//有序的整数序列
    for(i=n-1,change=true;i>1&&change;--i)
    {
        change=false;
        for(j=0;j<i;++j)
            if(a[j]>a[j+1])
            {
                a[j]←→a[j+1];
                change=true;
            }
    }
}//bubble_sort

操作次数与开始序列和n有关,最好的情况,外循环值执行一次。

基本操作:赋值操作。最高达到n*(n-1)/2,最低达到(n-1)

算法时间复杂度一般以最坏的情况为准,所以O(n^2),

有的情况也考虑平均的时间复杂度。

二、算法空间复杂度

S(n)=O(g(n))

表示随着问题规模n的增大,算法运行所需存储量的增长率与g(n)的增长率相同

算法的存储量包括:1.输入数据所占空间----有时不论什么算法,输入所占空间相同   2.程序本身所占空间 ----可不考虑   3.辅助变量所占空间

                         若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。

                         若所需额外空间(变量)相对于输入数据量来说是常数,则称此算法为原地工作。

                         若所需存储量依赖于特定的输入,则通常按最坏情况考虑。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值