数据结构学习笔记(一)——《大话数据结构》

第一章 数据结构绪论

基本概念和术语

数据

描述客观事物的符号,计算机中可以操作的对象,能被计算机识别并输入给计算机处理的符号的集合。包括整型、实型等数值类型和字符、声音、图像、视频等非数值类型。

数据元素

组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。

  • 例如:禽类的数据元素为鸡、鸭、鹅等。

数据项

一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位。

  • 例如:对于人这个数据元素,可以有眼、耳、嘴、鼻等数据项,也可以有姓名、年龄、性别等数据项,具体选取哪些数据项视所构建的系统决定。

数据对象

是性质相同的数据元素的集合,是数据的子集。其中“性质相同”指数据元素具有相同数量和类型的数据项。通常将数据对象简称为数据。

数据结构

是相互之间存在一种或多种特定关系的数据元素的集合。计算机中的数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。

逻辑结构与物理结构

逻辑结构

是指数据对象中数据元素之间的相互关系。

用示意图表示数据的逻辑结构时:

  • 将每一个数据元素看作一个节点,用圆圈表示;
  • 元素之间的逻辑关系用节点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示。
集合结构

集合结构中的数据元素除了同属于一个集合外,互相之间没有其他关系。

1340553-20180306105425835-1995423397.png

线性结构

线性结构中数据元素之间是一对一的关系。

1340553-20180306105433771-1117138910.png

树形结构

树形结构中数据元素之间存在一种一对多的层次关系。

1340553-20180306105440270-294438694.png

图形结构

图形结构的数据元素是多对多的关系

1340553-20180306105450481-1914075632.png

物理结构(存储结构)

物理结构是指数据的逻辑结构在计算机中的存储形式。数据的存储结构应正确反映数据元素之间的逻辑关系,如何存储数据元素之间的逻辑关系是实现物理结构的重点和难点。

顺序存储结构

把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。如数组。

1340553-20180306105459459-580711487.png

数据结构中经常会需要添加新的数据元素、去掉旧的数据元素,面对这种时刻变化的情况,顺序结构不够科学。

链式存储结构

链式存储结构把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系并不能反应其逻辑关系,需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联的数据元素的位置。

1340553-20180306105506468-2065415955.png

逻辑结构是面向问题的,物理结构则是面向计算机的,其基本目标就是将数据及其逻辑关系存储到计算机的内存中。

抽象数据类型

数据类型

数据类型是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。例如在高级语言中,每个变量、常量和表达式都有各自的取值范围,类型就用来说明变量或表达式的取值范围和所能进行的操作。

在C语言中,按照取值的不同,数据类型可以分成两类:

  • 原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等;
  • 结构类型:由若干个类型组合而成,是可以再分解的。例如。整型数组是由若干整型数据组成的。

抽象数据类型

对已有数据类型进行抽样,就得到了抽象数据类型。

抽象数据类型(Abstract Data Type, ADT)是指一个数学模型及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,与其在计算机内部如何表示和实现无关。

例如各种计算机,无论是超算、PC、平板、智能手机等,都拥有“整数”类型,也需要整数间的运算,那么整型就是一个抽象数据类型,尽管它在上面提到的各种计算机中的实现方法可能不一样,但由于其定义的数学特征相同,在编程者看来,它们就是相同的。因此,抽象的意义在于数据类型的数学抽象特性。

抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。

这里给出描述抽象数据类型的标准格式:

ADT 抽象数据类型名
Data数据元素之间逻辑关系的定义
Operation   操作1初始条件操作结果描述操作2......操作n......
endADT

总结回顾

数据结构相关概念

1340553-20180306105533236-133588807.png

数据结构定义

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

数据结构分类

1340553-20180306105548201-1645134107.png

抽象数据类型及其描述方法

ADT 抽象数据类型名
Data数据元素之间逻辑关系的定义
Operation   操作1初始条件操作结果描述操作2......操作n......
endADT

转载于:https://www.cnblogs.com/communedefence/p/8513152.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的垃圾回收机制包括:主流回收算法和收集器(jvm的一个主要优化方向)

2019独角兽企业重金招聘Python工程师标准>>> java的垃圾回收机制是java语言的一大特色,解放了开发人员对内存的复杂控制,但如果你想要一个高级java开发人员,还是需要知道其机制,所谓不仅要会用还要知道其原理这样才能用…

@hot热加载修饰器导致static静态属性丢失(已解决)

react开发的时候,引入热加载,用了修饰器的引入方式,发现了一个很有意思的问题,网上并没有相关文章,所以抛出来探讨下。 一段很简单的测试代码。但是经过babel编码后,变得很有意思。假设编码成es2016&#x…

学习vue.js的自我梳理笔记

基本语法格式&#xff1a; <script> new Vue({ el: #app, data: { url: http://www.runoob.com } }) </script> 指令 【指令是带有 v- 前缀的特殊属性。】 判断 <p v-if"seen">现在你看到我了</p> 参数 <a v-bind:href"url"&…

Spring+jpaNo transactional EntityManager available

2019独角兽企业重金招聘Python工程师标准>>> TransactionRequiredException: No transactional EntityManager availableEntityManager执行以下方法(refresh, persist, flush, joinTransaction, remove, merge) 都需要需要事务if (transactionRequiringMethods.cont…

01_Struts2概述及环境搭建

1.Struts2概述&#xff1a;Struts2是一个用来开发MVC应用程序的框架。Struts2提供了web应用程序开发过程中一些常见问题的解决方案;对用户输入的数据进行合法性验证统一的布局可扩展性国际化和本地化支持Ajax表单的重复提交文件的上传和下载... ...2.Struts2相对于Struts1的优势…

高可用性、负载均衡的mysql集群解决方案

2019独角兽企业重金招聘Python工程师标准>>> 一、为什么需要mysql集群&#xff1f; 一个庞大的分布式系统的性能瓶颈中&#xff0c;最脆弱的就是连接。连接有两个&#xff0c;一个是客户端与后端的连接&#xff0c;另一个是后端与数据库的连接。简单如图下两个蓝色框…

剥开比原看代码09:通过dashboard创建密钥时,前端的数据是如何传到后端的?

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;freewind 比原项目仓库&#xff1a; Github地址&#xff1a;https://github.com/Bytom/bytom Gitee地址&#xff1a;https://gitee.com/BytomBlockchain/bytom 在前面一篇文章&#xff0c;我们粗略的研究…

004. ES6之函数的扩展

2019独角兽企业重金招聘Python工程师标准>>> 1. 函数参数的默认值 ES6 允许为函数的参数设置默认值&#xff0c; function log(x, y World) {console.log(x, y); }log(Hello) // Hello World log(Hello, China) // Hello China log(Hello, ) // Hello// 1. 参数变量…

一名3年工作经验的程序员应该具备的技能

本文转自:https://m.imooc.com/article/details?article_id7557 前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结&#xff0c;因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的&#xff0c;当然因为LZ本身是做Java开发的&#xff0c;因此有一部…

多语言版希尔排序

2019独角兽企业重金招聘Python工程师标准>>> 简介 希尔排序(Shells Sort)是插入排序的一种又称“缩小增量排序”&#xff08;Diminishing Increment Sort&#xff09;&#xff0c;是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L…

UML 中extend和include的区别

在UML用例图中有两种关系——包含和扩展&#xff0c;容易混淆&#xff0c;下面通过一张表来区别一下这两种关系。 转载于:https://www.cnblogs.com/yonyong/p/8555547.html

浏览器兼容CSS渐进增强 VS 优雅降级如何选择

由于低级浏览器不支持 CSS3&#xff0c;但是 CSS3 特效太优秀不忍放弃&#xff0c;所以在高级浏览器中使用CSS3&#xff0c;而在低级浏览器只保证最基本的功能。二者的目的都是关注不同浏览器下的不同体验&#xff0c;但是它们侧重点不同&#xff0c;所以导致了工作流程上的不同…

2018年,牛客网小白月赛5

第一次啊&#xff0c;补题&#xff0c;希望大佬批评。 题目按我补题顺序来的。 https://www.nowcoder.com/acm/contest/135#question H 题 最大公倍数 题意:给出两个数&#xff0c;求最大公倍数 欧几里德算法算出最大公约数k; 然后算出。最大公倍数即可 代码如下&#xff1a; …

爬虫笔记(十二)——浏览器伪装技术

为什么要进行浏览器伪装技术&#xff1f; 有一些网站为了避免爬虫的恶意访问&#xff0c;会设置一些反爬虫机制&#xff0c;对方服务器会对爬虫进行屏蔽。常见的饭爬虫机制主要有下面几个&#xff1a; 1. 通过分析用户请求的Headers信息进行反爬虫 2. 通过检测用户行为进行反…

《活出生命的意义》:人生有何意义?

在你一生的阅读体验中&#xff0c;如果能够有一本书&#xff0c;它的某个章节、某种思想、或者某句话能够触动你的内心&#xff0c;解决你的困惑&#xff0c;甚至能改变你的命运&#xff0c;那这样的一本书你一定要视如珍宝&#xff0c;经常翻阅&#xff0c;维克多弗兰克尔的《…

右键添加git-bash

主要&#xff1a; 右键如果没有git-bash&#xff0c;如何给右键手动添加 前面对右键存在git-bash但使用出现问题的解决&#xff0c;也想到如果右键都没有&#xff0c;该如何给右键添加了&#xff0c;于是接着记录下如何添加的过程&#xff1a; 情形&#xff1a; 手动给右键添加…

Weblogic的缓存

2019独角兽企业重金招聘Python工程师标准>>> 最近遇到一个关于weblogic缓存的问题。再把war包放入到weblogic指定目录启动以后&#xff0c;访问页面信息没有更新。最后发现是\weblogic\user_projects\domains\base_domain\servers\AdminServer下的文件没有清除&…

725. 分隔链表

725. 分隔链表 给你一个头结点为 head 的单链表和一个整数 k &#xff0c;请你设计一个算法将链表分隔为 k 个连续的部分。 每部分的长度应该尽可能的相等&#xff1a;任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。 这 k 个部分应该按照在链表中出现的顺…

LAMP介绍-MySQL安装

2019独角兽企业重金招聘Python工程师标准>>> LAMP: linux-apache-mysql-php &#xff08;安装方式有&#xff1a;rpm&#xff0c;源码&#xff0c;二进制免编译&#xff09; linux-操作系统 apache-web服务软件&#xff08;httpd&#xff09; mysql-存储数据库 php…

java1

不知道为啥粘贴的图片是一堆编码。。。。 如何插入图片 博客后后台MarkDown编辑器上只有一个按钮&#xff0c;就是用来上传图片并自动插入MarkDown标记的&#xff0c;超级好用 &#xff08;一&#xff09;学习总结 1.在java中通过Scanner类完成控制台的输入&#xff0c;查阅JDK…