当前位置: 首页 > news >正文

数据结构day1

一,基础概念

1.数据结构:相互之间存在一种或多种特定关系的数据元素的集合。(特定关系有逻辑关系与物理关系)

(1)逻辑结构

        集合,所有数据在同一个集合中,关系平等

        线性,数据和数据之间是一对一的关系

        树, 一对多

        图,多对多

(2)物理结构(在内存当中的存储关系)

        顺序存储,数据存放在连续的存储单位中,逻辑关系和物理关系一致;

        链式存储(链表),数据存放的存储单位是随机或任意的,可以连续也可以不连续  (一般认为不连续)

2、数据、 数剧项、数据元素、数据对象

(1)数据:可输入输出,具备一些操作(相当于C语言中的变量)

(2)数据项:给变量赋予一定的含义

(3)数据元素:多个基础的数据项拼在一起(C语言中用struct自定义表示)

(4)数据对象:数据元素的集合

3、数据的类型,ADT    abstruct datatype

(1)ADT:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

        原子类型,int,char,float

        结构类型,sturct, union,

(2)抽象数据类型, 数学模型 + 操作。

4、数据结构角度解释程序:程序 =  数据 + 算法

(1)算法的定义:是解决特定问题求解步骤的描述,计算机中表现为指令的有限序

列,每条指令表示一个或多个操作。

(2)算法的特征:
         输入,输出特性:输入时可选的,输出时必须的(调用函数后要发生一些变化);

         有穷性:    执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间内完成;

         确定性:同一个输入,会得到唯一的输出;

         可行性:每一个步骤都是可以实现的(用编程语言实现)。

(3)算法的设计:

         正确性:语法正确;

                       合法的输入能得到合理的结果;

                       对非法的输入,给出满足要求的规格说明;

                       对精心选择,甚至刁难的测试都能正常运行,结果正确(加必要的判断);

        可读性:便于交流,阅读,理解(适当注释,编写项目文档)

        健壮性:输入非法数据,能进行相应的处理,而不是产生异常

        高效性:存储低,效率高 (时间与空间两个方面)

5、算法时间复杂度

(1)是执行这个算法所花时间的度量。

(2)推时间复杂度:

        用常数1 取代运行时间中的所有加法常数;

        在修改后的运行函数中,只保留最高阶项;

        如果最高阶存在且不是1,则取除这个项相乘的常数。

(3)时间复杂度排序:

        O(1)<O(logn)<O(N)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)

二、线性表


1、定义:有零个或多个数据元素的有限序列;

2、元素之间是有顺序的,如果存在多个元素,第一个元素无前驱,最有一个没有后

继,其他的元素只有一个前驱和一个后继;

3、当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的

表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。

4、线性表中的顺序表:

表头结构(数组当前状态,后期方便应用管理)

typedef struct list {
    DATATYPE *head;//指针
    int tlen;//总长度
    int clen;//当前长度(数组元素个数)(未使用空间时为0)
}SeqList//顺序表;

 5.顺序表的几种基本操作

int DestroySeqList(SeqList *list);    //销毁顺序表
int ShowSeqList(SeqList *list);      //展示顺序表数据
int InsertTailSeqList(SeqList *list, DATATYPE *data);    //在顺序表尾部插入数据
int IsFullSeqList(SeqList *list);      //判断顺序表是否装满
int IsEmptySeqList(SeqList *list);  //判断顺序表是否为空
int InsertPosSeqList(SeqList *list, DATATYPE *data, int *pos);  // 在指定位置插入数据
int FindSeqList(SeqList *list, char *name);   //按值查找
int DeleteSeqList(SeqList *list, char *name); //按值删除
int GetSizeSeqList(SeqList *list);  //获取顺序表长度

http://www.xdnf.cn/news/417691.html

相关文章:

  • 使用 IntelliJ IDEA 和 Maven 创建 Spark 项目
  • 云原生|kubernetes|kubernetes的etcd集群备份策略
  • 高防服务器部署实战:从IP隐匿到协议混淆
  • Scala和Go差异
  • 【面试 · 三】react大集合(类式/函数式)
  • 需求与技术实现不匹配,如何协调
  • 【 Redis | 实战篇 秒杀实现 】
  • 在虚拟机Ubuntu18.04中安装NS2教程及应用
  • Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
  • niushop单商户V5多门店版V5.5.0全插件+商品称重、商家手机端+搭建环境教程
  • Unity引擎源码-物理系统详解-其一
  • centos中libc.so.6No such file的解决方式
  • AI+企业应用级PPT生成(实战)
  • 初识XML
  • 软件测试(概念1)
  • 使用CAS操作实现乐观锁的完整指南
  • C++的历史与发展
  • 原创-业务接口数据监控
  • MyBatis-Plus的批量插入与原生JDBC效率对比
  • git 怎么更改本地的存储的密码
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.3 风险指标可视化监控
  • Yarn-概述
  • 用自写的jQuery库+Ajax实现了省市联动
  • 专题三:穷举vs暴搜vs深搜vs回溯vs剪枝(全排列)决策树与递归实现详解
  • 实现 STM32 PWM 输出:原理、配置与应用详解
  • 美学心得(第二百七十六集) 罗国正
  • RDD案例数据清洗
  • 【SpringBoot】从零开始全面解析Spring MVC (一)
  • 飞书配置表数据同步到数据库中
  • 《微机原理与接口技术》第 6 章 半导体存储器