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

数据结构

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

数据结构 主要研究问题的求解方法 典型数据结构的算法  程序设计方法

包含三方面:数据的逻辑结构 数据的存储结构(物理结构) 数据的运算

逻辑结构:指反映数据元素之间的逻辑关系的数据结构

 1集合机构:数据元素同属于一个集合,他们之间是并列的关系,除此之外没有其他关系
 2线性结构:线性结构中的元素存在一对一的相互关系
 3树形结构:树形结构中的元素存在一对多的相互关系
 5图形结构:图形结构中的元素存在多对多的相互关系

物理结构:数据的逻辑结构在计算机存储空间的存放形式 

 1 顺序存储
    是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的 数组是代表
    
 2 链式存储
    是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的。数据元素之间是通过指针连接


    
 顺序结构和链式结构的区别:

 比如去银行取钱,顺序存储结构就相当于,所有的客户按照先来后到的顺序有序的的坐在大厅的椅子上(注意:是有顺序的坐着哦)
 而链式存储结构相当于,所有的客户只要一到银行,大堂经理就给他们每人一个号码,然后他们可以随便坐在哪个椅子
(随便坐,不需要按照什么顺序坐),只需要等待工作人员广播叫号即可。而每个客户手里的号码就相当于指针,
 当前的指针指向下一个存储空间,这样,所有不连续的空间就可以被有顺序的按照线性连接在一起了 


目的:提高数据处理的效率
体现:数据的处理速度,尽量节省数据处理过程中所占用计算机的存储空间
数据类型:初等类型和复合类型
数据结构: 线性数据结构和非线性数据结构
线性结构:数据结构里有且仅有一个终端节点和一个开始节点,所有节点只有一个前驱和一个后驱【数组】
非线性结构:不满足线性结构的数据(树和图)

线性结构表示:K={A,B,C,D,E,F}
               R=<A,B>,<B,C>,<C,D>,<D,E>,<E,F>
              
计算机存储器 有有限个存储单元 每个单元有唯一的地址,存储单元是连续编址的
4种基本存储映像的方法:

 顺序方法:逻辑上相邻的节点存放在物理是相邻的存储单元
 链接方法:每个节点附上指针字段。节点本身与存放后继节点的存储单元地址
 索引方法:引用节点的索引号来去顶节点的存储位置
 散列法:根据节点的值确定它的存储地址,用散列函数

 数据的运算时定义在逻辑结构上的,具体实现在 存储结构上进行
 常见的运算: 检索  插入  更新 删除  排序  遍历
 算法:解决某一个问题采取的方法和步骤
 算法分为:数值算法和非数值算法
 
 算法五个特点:

              1有限操做步骤(有穷性)
              2每一个错做步骤是确定的(确定性)
              3从外界输入信息(输入)
              4输出信息(输出)
              5每一步骤都应有效(有效性)


 算法的表示方法:

                1 自然语言
                2 伪代码表示 BEGIN开始 END结束
                3 流程图表示(用流程线连接起来表示算法的步骤和过程的图形)
                4 结构化流程图N-S图
                5 PAD图表示 (类似Windows操作系统中资源管理器的形式)在左边形成一条流程线


                
评价算法的优劣:时间复杂度和空间复杂度,即算法执行过程中所占用的存储单元数目和算法执行的时间效率

一 时间复杂度
算法的时间复杂度是指执行该算法的基本运算次数的计算,不仅取决于输入处理数据的大小,也取决于数据本身的性质
    例如:排序中的基本运算是比较运算,忽略了赋值运算;矩阵乘法算法中的基本运算时乘法运算,忽略加法运算
不用的算法中基本运算不同。
                
二 空间复杂度
 算法执行过程中 所占的存储单元的数目成为空间复杂度
 
 时间复杂度比空间复杂度重要,所有在做算法分析时一般指的是时间复杂度
 常见的时间复杂度表示:
 O(1)
 O(log2n)
 O(n)
 O(n^2)
 O(2^n)
 
 
 2.1.1  线性表
 线性结构有线性表 堆栈 队列 线性链表
 
  线性表地址;第i个元素的地址为:
  LOC(ai)=LOC(a1)+(i-1)x1
  
  线性表运算 7基本运算:

  (1)取出线性表中第i个元素
  (2)修改线性表中第i个元素
  (3)在线性表中第i个元素后插入一个元素
  (4)删除线性表中第i个元素
  (5)按某种要求重排线性表中元素的顺序
  (6)在线性表中查找满足条件的元素
  (7)判断线性表是否为空


  2.1.2 堆栈【内存】
  堆栈又称为栈(先进后出)  在函数内部声明的所有变量都将占用栈内存。
  栈的工作方式:(1)栈底是可动的,栈顶是固定的
                 (2)栈底是固定的,栈顶是可动的
  堆栈的基本运算:

        (1)栈的押入 
        (2)栈的弹出 
        (3)读栈顶元素
        (4)判断栈是否为空
        (5)取出栈顶元素
        (6)判断栈是否为满

2.1.3 堆

    堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存
福利: 数据结构的可视化工具:

http://visualgo.net

       
        
        
    
  
  
  
  
                
                

转载于:https://my.oschina.net/jamescasta/blog/1054818

相关文章:

  • 本地运行Tachyon(译)
  • springboot(十四):springboot整合shiro-登录认证和权限管理
  • 是反反复复
  • 使用Keil MDK以及标准外设库创建STM32工程
  • Genymotion 插件在 Eclipse 和 Android Studio 中点击后无法初始化 Initialize Engine: failed 解决方法...
  • SQL --max使用
  • 11款开放中文分词引擎大比拼
  • 程序员入行须知
  • Material Design
  • c++ Map使用
  • 打造终端下mutt收发邮件环境(fbterm,fetchmail,msmtp,procmail,mutt)
  • hosts文件位置
  • jvm调优——eclipse示例
  • 解决boost::asio的WinSock.h has already been included
  • zuul入门(4)zuul的注解@EnableZuulServer和@EnableZuulProxy
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【React系列】如何构建React应用程序
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java到底能干嘛?
  • python3 使用 asyncio 代替线程
  • spring学习第二天
  • Webpack 4 学习01(基础配置)
  • 爱情 北京女病人
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 关于for循环的简单归纳
  • 开源SQL-on-Hadoop系统一览
  • 前端面试之闭包
  • 如何利用MongoDB打造TOP榜小程序
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 怎么把视频里的音乐提取出来
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​2020 年大前端技术趋势解读
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Spring Boot 分片上传文件
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2)nginx 安装、启停
  • (9)STL算法之逆转旋转
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三分钟)速览传统边缘检测算子
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • .NET Framework .NET Core与 .NET 的区别
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET的微型Web框架 Nancy
  • .NET轻量级ORM组件Dapper葵花宝典
  • ::什么意思
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ActionScript][AS3]小小笔记