【1.1数据结构】

基本概念和术语

数据

能够输入到计算机且能够被计算机处理的各种符号的集合

  • 信息的载体
  • 对客观事物符号化的表示
  • 能够被计算机识别、存储和加工
    包括:
  • 数值型数据:整数、实数等
  • 非数值型数据:文字、图像、图形、声音等

数据元素

  • 数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
  • 也称元素、记录、结点、顶点。
    在这里插入图片描述
    图中,某位同学的学号、姓名、性别、出生日期、政治面貌即为一个数据元素。

数据项

  • 构成数据元素的不可分割的最小单位
    在这里插入图片描述
    数据>数据元素>数据项

数据对象

  • 性质相同的数据元素的集合,是数据的一个子集。

数据元素和数据对象

  • 数据元素——组成数据的基本单位
    与数据的关系:集合当中的个体
  • 数据对象——性质相同的数据元素的集合
    与数据的关系:集合当中的子集

数据结构

  • 数据元素不是鼓励的存在,数据元素相互之间的关系称为结构
  • 是指相互之间存在的一种或者多种特定关系的数据元素的集合
  • 或者说,数据结构是带结构的数据元素的集合

数据结构包含的内容

  • 数据元素之间的逻辑关系,也称 逻辑结构
  • 数据元素与其关系在计算机内存当中的表示(映像),称为数据的物理结构(存储结构)
  • 数据的运算和实现,即对数据元素可以施加的操作以及这些操作在存储结构上的实现

逻辑结构和物理结构

  • 逻辑结构
    • 描述的是数据元素之间的关系
    • 与数据的存储无关,独立于计算机
    • 是从具体问题抽象出来的数学模型
  • 物理结构(存储结构)
    • 数据元素及其关系在计算机存储器中的结构(存储方式)
    • 是数据结构在计算机当中的表示
  • 逻辑结构和存储结构之间的关系
    • 存储结构是逻辑关系的影响和元素本身的映像
    • 逻辑结构是数据结构的抽象,存储结构是逻辑结构的实现
    • 两者综合起来建立了数据元素之间的结构关系
  • 逻辑结构的种类
    • 按照线性、非线性划分
      (1)线性结构
      有且仅有一个开始和一个终端结点,并且所有结点都最多有一个直接前趋和一个直接后继
      例如:线性表、栈、队列、串
      (2)非线性结构
      一个结点有多个直接前趋和直接后继
      例如:树、图

    • 四类基本逻辑结构
      (1)集合结构
      结构中的数据元素除了同属于一个集合的关系外,无任何其他关系。
      (2)线性结构
      结构中的数据元素之间存在着一对一的线性关系
      (3)树形结构
      结构中的数据元素之间存在着一对多的层次关系
      (4)图状结构(网状结构)
      结构中的数据元素存在着多对多的任意关系
      四类基本逻辑结构

    • 四类基本存储结构
      (1)顺序存储结构
      用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置决定
      C语言当中用数组实现顺序存储结构
      (2)链式存储结构
      用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示
      C语言中用指针来实现链式存储结构
      在这里插入图片描述
      存储数据元素的同时也存储了下一个元素的地址

      (3)索引存储结构
      在存储结点信息的同时,还建立附加的索引表
      (4)散列存储结构
      根据结点的关键字直接计算西湖该结点的存储位置

数据类型和抽象数据类型

数据类型

一组性质相同的值得集合以及定义在这个值的集合上的一组操作的总称

  • 数据类型的作用
    • 约束变量或者常量的取值范围
    • 约束变量或者常量的操作

抽象数据类型

一种数据类型以及定义在这种数据类型上的一组操作

  • 由用户定义,从具体问题抽象出来的数据模型(逻辑解雇)
  • 还包括定义在数据模型上的一组抽象运算(相关操作)
  • 不考虑计算机内的具体存储结构与运算的具体实现算法。

例如:
在这里插入图片描述
数据类型:圆 (到某个点的距离相等的点的集合)
操作:构造圆、求面积、求周长

抽象数据类型的形式定义

抽象数据类型可用(D,S,P)三元组表示
其中:D是数据对象
S是D上的关系集
P是对D的基本操作集

  • 定义格式
    ADT 抽象数据类型名{
    数据对象:<数据对象的定义>
    数据关系:<数据关系的定义>
    基本操作:<基本操作的定义>
    }ADT 抽象数据类型名

    • 其中数据对象、数据关系的定义用伪代码描述

    • 基本操作的定义格式

      • 基本操作名<参数表>
      • 初始条件:<初始条件描述>
      • 操作结果:<操作结果描述>

      其中:
      参数表:赋值参数,只为操作提供输入值。引用参数以&打头,除可提供输入值外,还将返回操作结果。
      初始条件:描述执行操作之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应的出错信息;若初始条件为空,则省略之。
      操作结果:说明操作正常完成之后,数据结构的变化状况和应返回的结果。

举例:

  • Circle的定义

       ADT Circle{
     	  数据对象:D={r,x,y}|r,x,y均为实数
     	  数据关系:R={<r,x,y>|r是半径,<x,y>是圆心坐标}
     	  基本操作:
     	  Circle(&C,r,x,y) 操作结果:构造一个圆
     	  double Area(C)
     	  		初始条件:圆已经存在
     	  		操作结果:计算圆的面积
     	  double Circumstance(C)
     	  		初始条件:圆已经存在
     	  		操作结果:计算圆的周长
       } **ADT Circle**
    
  • 复数的定义

      ADT Complex{
     	  数据对象:D={r1,r2}|r,x,y均为实数
     	  数据关系:R={<r1,r2>|r1是实部,r2是虚部}
     	  基本操作:
     	  Assign(&C,r1,r2) 
     	  		初始条件:空的复数C已经存在
     	  		操作结果:构造一个复数
     	  Destory(C)
     	  		初始条件:复数C已经存在
     	  		操作结果:复数C已经销毁
     	  GetReal(C,&realPart)
     	  		初始条件:复数C存在
     	  		操作结果:用realPart返回复数的实部
     	  GetImageC,&imagPart)
     	  		初始条件:复数C存在
     	  		操作结果:用imagPart返回复数的虚部
     	  Add ](C1,C2,&sum)
     	  		初始条件:复数C1,C2存在
     	  		操作结果:sum返回两个复数的和
     	 / .....数据操作
     	  } ADT Circle
    

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

抽象数据类型可以通过已有的数据类型(如整形、实型、字符型等)来实现和表示。即利用处理器中已经存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作。

  • 举个栗子: 复数的表示、实现
    (1)表示:

      typedef struct Complex{
      	   float x;
      	   float y;
       } 
       //声明
      void assign(float a,float b,Complex &A);//构造复数
      void add(Complex A,Complex B ,Complex &C);	//A+B
      void Sub(Complex A,Complex B ,Complex &C);	//A-B
      void Multi(Complex A,Complex B ,Complex &C);	//A*B
      void Divide(Complex A,Complex B ,Complex &C);	//A/B
    

    (2)实现:

      void assign(float a,float b,Complex &A)
      {
      A.realPart=a;
      A.imagPart=b;
      }
      
      void add(Complex A,Complex B ,Complex &C)
      {
      C.realPart=A.realPart+B.realPart;
      C.imagPart=A.imagPart+B.imagPart;
      }
      
      void Sub(Complex A,Complex B ,Complex &C)
      {
      C.realPart=A.realPart*B.imagPart-A.imagPart+B.realPart;
      C.imagPart=A.imagPart+B.imagPart;
      
      }
    

一个小结
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值