认识数据结构

作者:余小小

数据类型

  • 基本数据类型:short 、chartint 、long 、float 、double

  • 指针类型:取值和定义指针都需要用到新号

    int *p1 = &A;
    
  • 构造体类型

  • 空类型void

NULL指针是不执行任何地址(一定是大写的),值是数字0,用来初始化指针的时候常用。int *p1 =NULL;

一个值的集合(类型)和定义再找个集合上的一组操作

  • 比如int类型,可以进行四则运算操作

  • bool类型,可以进行与或非操作

  • 原子类型,原子是物理中最小的单位,也就是说,是在数据类型中不可再分的数据类型了,比如bool类型,int类型,也就是说基本数据类型

  • 结构类型:一个结构类型还可以分割成其他的结构类型,比如说对象,或者说结构体,里面还包含了其他基本数据类型的属性。

抽象数据类型(adt——abstract data type)

只会考虑三要素中的逻辑和运算,不考虑实际的存储

抽象类,抽象方法,我只会声明,不会管你的实现

在线idea

Online C++ Compiler - online editor (onlinegdb.com)

构造类型

数组

数组:相同数据类型的变量排成一列的变量集合

初始化一个数组:

int A[5] ={1,2,4,5,6};

构造类型

构造类型:不同的数据类型的变量组合在一起的集合

struct关键字

#include <stdio.h>

int main()
{
    
    typedef struct DEMO1{
        int age;
        double money;
        char name ;
    } DEMO1;
    DEMO1 man1; 
 
    man1.age = 22;
    man1.money = 222.11;
    man1.name = 'y';
    
    printf("%d\n", man1.age);
        printf("%f\n", man1.money);
            printf("%c\n", man1.name);

    return 0;
}

如果没有使用typedef关键字,则需要每次使用结构体类型的时候,都需要添加struct关键字

数据结构概念

数据——信息的载体。

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

集合,就是大杂烩,暂时不要多想,简单的理解集合,就是大杂烩

所以说,数据元素是数据的基本的单位。

数据元素由多个数据项构成

  • 数据项:属性
  • 数据元素:结构体
  • 数据对象:很多个数据元素
  • 数据:很多个数据对象

数据对象概念

具有相同性质的数据元素的集合,只有一种特定的关系的 数据元素的集合,是数据的一个子集

image-20210910100903697

数据元素和数据项

数据元素:是数据的基本单位,通常是一个整体进行考虑,例如一个对象(结构体)

一个数据元素由 若干个数据项 数据项是数据元素的每一项,是数据元素的最小单位,例如对象中的属性值,是对象中的最小的单位

数据结构的三要素

  1. 逻辑结构
  2. 物理结构(存储,磁盘)
  3. 数据运算

讨论数据结构,需要从这三个要素讨论

数据的逻辑结构分类

  • 没有关系——集合
  • 一对一——线性结构
  • 一对多——树形结构
  • 多对多——图

逻辑,是思想上的,看不到的,但是可以通过几何的形式画出来

  • 集合:各个数据元素在一堆,大杂烩(火锅)
  • 线性结构:数据元素是一对一的关系,这个一对一是指的是数据元素和相邻的数据元素(一夫一妻),除了第一个数据元素,其他都有一个唯一的前驱元素,除了最后一个数据元素,其他的都有一个唯一的后继元素
  • 树形结构:一对多的关系(一夫多妻)
  • 图状结构:数据元素之间多对多(多夫多妻)

可以分为两类:

  1. 线性结构
  2. 非线性结构

数据的存储/物理结构

索引不是指针,类似指针,索引是指向的值,指针是指向的地址】

存储/物理结构是可以实现的,可以将逻辑结构用计算机中的语言描绘起来

  • 顺序结构:只有值,索引由计算机创建

    int Array [9];
    
  • 链式结构:有值,有下个值的指针。

    #include <stdio.h>
    #include <stdlib.h>
    int
    main ()
    {
    
      typedef struct LNode
      {
        int data;			//值
        struct LNode *next; //下一个结点的指针
      } LinkNode; //结构体类型的自定义类型名字
      
      LinkNode *L;
      L = (LinkNode*)malloc(sizeof(LinkNode));
    
      return 0;
    }
    
    • sizeof关键字:计算数据类型的大小
    • malloc函数是通过指定的大小分配一个合适的内存空间,并返回这个内存空间的地址值(开房,并给你房间号),实际开发中需要引入#include <stdlib.h>头文件
    • malloc返回的是地址,所以需要用一个相同数据类型 的指针来接收。
    • (LinkNode*):强制转换成 LinkNode的指针类型

    加入有ABC三个结点,描述B节点的指针在A的中,C结点的指针在B中,

      A->next = B;
      B->next = C;
    

    这种描述是无法用计算机跑出来的

  1. (顺序存储)顺序存储:逻辑上相邻的元素存储的物理位置相邻的存储单元

  2. (非顺序存储)链式存储:逻辑上相邻的元素,再物理位置上不相邻,通过元素地址的指针来标识元素之间的逻辑关系,也就是说。按照指针来看,是相邻的,但是再实际的物理存储单元中,不是相邻的

  3. (非顺序存储)索引存储:存储元素信息的时候,创建一个索引表格。

  4. (非顺序存储)散列存储(哈希存储):通过关键字计算出再数据项的存储地址,散列存储也叫做哈希存储

除了顺序结构,其他的都是非顺序结构

顺序结构与链表结构的优缺点

顺序结构的优点:查找快,操作慢;按照顺序再真实的物理地址中存储

非顺序结构的优点:查找慢,操作快。散列的再真实的物理地址存储

数据的存储/物理结构的作用

  1. 实现逻辑结构
  2. 不同的存储结构在实现逻辑结构的时候有不同的存储效果

运算分析

运算的概念

运算的定义只针对逻辑结构

运算的实现是针对存储结构的

通过逻辑结构来确定运算的法则,而实现这个法则需要遵顼存储结构的实际存储是否是顺序存储等等判断。来进行实际的插入到指定的物理单元。

运算分析

  • 时间复杂度
  • 空间复杂度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我最爱吃鱼香茄子

请小余喝瓶杯咖啡吧

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

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

打赏作者

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

抵扣说明:

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

余额充值