数据结构与算法知识总结(一)
下面是对学习数据结构与算法一些基础知识总结,主要讲解的是数据结构与算法之间的关系。所以我称它为数据结构与算法知识总结之数据结构与算法之间的关系。如有错误,欢迎指出。
概要:
什么是数据结构?数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或者多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效果。数据结构往往同高效的检索算法和索引技术有关。数据存储的结构和基本算法,最基本的三种基本结构:线性结构、树型结构和图形结构。常用的算法:查找、排序。
那为什么我们要学习数据结构呢?因为要学好编程,数据结构是必须学好的,不仅仅是结构,每一种结构里面会有几种算法,这些算法包涵了不同的思想。数据结构贯穿程序设计的始终。拥有数据结构与算法的功底,能使我们更快地编写出更高效率的程序。“算法+数据结构=程序”。
一、数据结构:
(1)定义:数据结构是指相互之间存在着一种或者多种关系的数据元素的集合和该集合中数据元素之间的关系组成,分为逻辑数 据结构和存储(物理)数据结构两种。
(2)数据包括:数据(原材料)、数据元素(基本单位)、数据项(最小单位)、数据对象(子集)、数据结构(数据的组织形式即集合)、 数据类型(按照数据值的不同进行划分的可操作性)
注意:
① 数据元素之间不是独立的,而是存在特定的关系的,这下关系为结构。
② 数据结构指数据对象中数据元素之间的关系。
(3)数据的逻辑结构
定义:逻辑结构是指数据对象中数据元素之间的相互关系。
数据的逻辑结构可以分为两种:线性结构和非线性结构(集合、树、网)。
线性结构里的元素是一对一的关系,常见的线性结构是线性表,典型的线性表有:顺序表、链表、栈(知顺序栈、链栈)和队列(顺序队列、链队列)。
非线性结构里的元素是一对多或多对多的关系,常见的非线性结构包括:树(二叉树)、图(网)等。
也可以细分为以下四种基本类型:
集合结构:集合结构里面的元素关系是孤立的,仅同属于相同的集合。
线性结构:数据元素之间存在着一对一的线性关系。除第一个和最后一个元素外,每个元素只有一个前驱和一个后继数据元素。
树结构:数据元素之间存在这一对多的层次关系。除根结点外,每个数据元素只有一个前驱数据元素,可有0个或若干个后继数 据元素。
图结构:数据元素之间存在着多对多的任意关系。每个元素可有0个或若干个前驱数据元素和0个或若干个后继数据元素。
(4)数据的存储(物理)结构
定义:物理结构是指数据的逻辑结构在计算机中的存储形式。存储结构有两种:
顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
二、算法:
(1)定义:算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
(2)算法的五个重要特性:
① 有穷性:一个算法包含有限个操作步骤。一个算法在执行若干个步骤之后应该能够结束,而且每一步骤都在有限时间内完成。
② 确定性:算法中的每一步骤必须有确切的含义,不能产生二义性。
③ 可行性:算法中的每一步骤都应该是能有效地执行,并得到确定的结果。
④ 输入:一个算法可以有零个或多个输入。
⑤ 输出:一个算法有一个或多个输出。没有输出的算法是毫无意义的。
(3)算法设计的要求:
算法设计的好坏关乎程序执行效率,算法的设计必须满足下列四个要求:
1.正确性:正确性是指算法达到了测试要求。
2.可读性:指人对算法的理解,可读性高便于交流,有利于算法的调试和修改
3.健壮性:对于非法输入的数据,算法能给出相应的响应,阻止不可预料的后果的产生
4.效率与低存储量需求:效率指算法的执行时间,执行时间短的算法效率高。存储量需求是指算法执行过程中所需的最大存储空间,存储量需求越小的算法效率越高。
(4)算法的分析:
4.1.算法效率的度量:算法执行时间是其对应的程序在计算机上运行所消耗的时间。程序在计算机上运行所需时间与下列因素有关:
(a)算法本身选用的策略
(b)书写程序的语言
(c)编译产生的代码质量
(d)机器执行指令的速度
(e)问题的规模
其中算法本身选用的策略是算法好坏的根本,书写程序的语言和编译产生的代码质量要看具体的软件支持。
4.2.算法的时间复杂度:
可以用算法中语句的执行次数来度量一个算法的效率。(如下图)
4.3.算法的空间复杂度:
三、数据结构与算法之间的关系:既有联系又有区别
(1)两者之间的关系:
1.数据结构是底层,算法高层;
2.数据结构为算法提供服务;
3.算法围绕数据结构操作;
(2)联系:
程序=算法+数据结构。算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。所以说,数据结构是算法实现的基础,算法总是要依赖某种数据结构来实现的。算法的操作对象是数据结构。两者是相辅相成的存在,是不可分割的关系。
(3)区别:
① 两者的指代(即定义)不同
② 目的不同:数据结构研究的是数据的逻辑结构、存储结构的一些基本操作,而算法更多的是研究如何在数据结构的基本 上解决实际问题。算法是编程思想,数据结构则是这些思想的基础。
③ 特点不同:算法中执道行内的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内 完成。数据结构核心技术是分解与抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体 内容,就得到逻辑结构。
编程语言中常见的数据结构:
数据结构与算法知识总结(一)相关推荐
- Google工程师:如何看待程序员普遍缺乏数据结构和算法知识?
出处:极客时间<数据结构与算法之美> 很多技术人都很迷茫,觉得自己做的项目没有技术含量,成天就是卖苦力.技术的东西,日新月异,有些人总在忙于追求热点新技术,东学学.西学学,平时泛泛地看技术 ...
- 前谷歌工程师:如何看待程序员普遍缺乏数据结构和算法知识?
很多技术人都很迷茫,觉得自己做的项目没有技术含量,成天就是卖苦力.技术的东西,日新月异,有些人总在忙于追求热点新技术,东学学.西学学,平时泛泛地看技术书籍.技术文章,但始终根本抓不住技术的本质,干了三 ...
- 如何看待 70% 的程序员,缺乏数据结构和算法知识?
金三银四来了,各大厂动静不小,都在储备人才,绝对是程序员面试的黄金时间了,不少同学也在后台反馈面试中遇到的一些问题,所以今天想跟大家说说算法. 说起算法,那大厂面试是绝对必考的,可以说是一块大厂的敲门 ...
- 数据结构与算法知识要点简明教程(合集)
参考:https://blog.csdn.net/jiaoyangwm/article/details/80808235 https://blog.csdn.net/a2392008643/artic ...
- 【数据结构与算法知识】—动态规划之01背包问题
阅读之前看这里
- 年后跳槽BAT必看:10种数据结构、算法和编程课助你面试通关
作者 | javinpaul 译者 | 大鱼 编辑 | 一一 出品 | AI 科技大本营 进入 BAT 这样的巨头企业工作,无疑是很多程序员的梦想.但事实上,能通过这些公司高难度编程面试的只是一小撮人 ...
- 「走过」微软、优步,老工程师告诉你哪些数据结构和算法最重要
数据结构和基础算法作为计算机科学的必学课程,近几年却关注度越来越少.但程序员真的不再需要这两门基础知识了吗?一位在 Uber 等科技公司工作过的开发者分享了他的一手经验,告诉你实际工作中会用到哪些数据 ...
- 数据结构与算法必备的 50 个代码实现
点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 数据结构和算法是程序员的内功心法和基本功.无论是人工智能还是其它计算机科学领域,掌握扎实的数据 ...
- python数据结构算法 北京大学_北京大学公开课《数据结构与算法Python版》
之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...
最新文章
- 【Python之路】第二篇--初识Python
- 日期Date和字符串之间转换
- 【错误记录】Android Studio 的 Flutter 代码界面没有 Logcat 面板
- golang安装:GOPATH环境变量无需配置说明(>1.13)
- 【转载】分布式事务 介绍
- 关闭 Pycharm 更新提示
- Valid BFS? CodeForces - 1037D(思维 bfs)
- SpringMVC中静态资源的处理
- web 前端签名插件_10款前端开发神器,助你成前端高手?
- java定义数字类型的代码_数字类型内置方法(示例代码)
- VMware9 绿色破解版 下载地址
- 基于vue2.0的一个分页组件
- 7-6 打印沙漏 (20 分)
- 线上会议竞品调研报告
- 【论文阅读】【HLLDA】 A Hierarchical Model of Web Summaries
- 如何绘制合格的泳道图(跨职能流程图)?
- 线路/信道编码技术(1)——8B/10B编码
- 如何设置锚点居页面顶部距离
- Windows live Writer 发布博文
- busybox ync.c:(.text.sync_main+0x78): undefined reference to `syncfs' 出错
热门文章
- 计算机专硕学哪些专业,计算机考研学哪个专业
- (dp) 力扣309. 最佳买卖股票时机含冷冻期 思路
- Windows10家庭版的账号模糊不清使用而导致问题的修复
- java语言数据库编程_JAVA语言数据库编程实例详解
- zabbix5.0的安装与实现
- Java8学习笔记:计算两个时间的间隔及相隔天数、秒数等
- 前端技术实现文件预览(word、excel、pdf、ppt、mp4、图片、文本)
- 课堂练习3.1:进程的描述与状态
- 虚拟机网络(桥接、NAT、仅主机模式)
- 为什么说给大企业打工是一场难以善终的结局?