当前位置: 首页 > 编程日记 > 正文

数据结构(严蔚敏)

说起为什么重新拿起这本书,着实非常惭愧。是因为面试的时候,第一个面试官面试完项目之后。第二面试官说我们就当聊聊天,考考数据结构,算法就好了。结果以一个问题就把我难住了,这个问题是:哈希表是什么?

所以我打算花两天的时间重新把这本书看一遍,并做下笔记,这次我一定会记住。

第一章 绪论

​ 目前,计算机已深入到社会生活的各个领域,其应用已不再仅仅局限于科学计算,而更多的是用于控制,管理及数据处理等非数值计算领域。计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:信息的表示,信息的处理。

​ 信息的表示和组织又直接关系到处理信息的程序的效率。随着应用问题的不断复杂,导致信息量剧增与信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,必须分析待处理问题中的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。

1.1 什么是数据结构?

这必须是第一个问题。

大家有没有想过,计算机在解决一个具体问题时需要几个步骤呢?

  1. 从一个具体问题抽象出来一个数学模型
  2. 设计一个解决此模型的算法
  3. 编出程序
  4. 进行测试
  5. 得到答案

下面举三个例子:

  • 图书馆书目检索系统(按照书名或作者名进行排序):表结构(一对一)
  • 下棋游戏(每一步都对应着多种棋局):树形结构(一对多)
  • 多叉交通路口问题(每个路口之间互相影响):图结构(多对多)

1.2 基本概念和术语

  • data(数据):对客观事物的符号表示。

  • data element :数据的基本单位。

  • data object : 性质相同的数据元素的集合,是数据元素的一个子集。

  • data structure :是相互之间存在一种或多种特定关系的数据元素的集合。

    • structure :结构(通常有下列4种结构)

      1. 集合(除属于一个集合外无其他关系)
      2. 线性结构(一对一)
      3. 树形结构(一对多)
      4. 图状结构(多对多)

数据结构在计算机中的表示

数据结构在计算机中的表示称为数据结构的物理结构,又称存储结构。

  • bit(位):二进制中的一位,是计算计中的最小单位。
  • element(元素) or node(节点):若干位组成的位串。
  • data field(数据域):当数据元素由若干数据项组成时位串中对应于各个数据项的子位串称为数据域。

数据元素在计算机中的两种关系

  • 顺序映像,存储结构为顺序存储结构

    特点:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。

    如表示复数:z1 = 3.0-2.3i 和 z2 = -0.7+4.8i 。(如图a)

  • 非顺序映像,存储结构为链式存储结构

    特点:借助元素存储地址的指针表示元素之间的逻辑关系。

    如表示复数:z1 = 3.0-2.3i。(如图b)

数据类型(data type)

数据类型是一个值的集合和定义在这个值上一注操作的总称。例如 C 语言上的整形变量,其值为某个区间上的整数,定义在其上的操作为加减乘除取模等算术运算。

高级语言的数据类型可分为两类:

1. 原子类型:原子类型的值是不可分割的。
2. 结构类型:结构类型的值由若干结构的某种结构的值组成,因此是可以分解的,并且它的成分可以是结构的,也可以是非结构的。
复制代码

抽象数据类型(abstract data type)

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

一个抽象数据类型的软件模块通常有定义,表示和实现三个部分组成。

  1. 定义可分为三种类型:

    • 原子类型(atomic data type)
    • 固定聚合类型(fixed-aggregate data type):其值由确定数目的成分按某种结构组成。复数由两个实数依确定的次序关系组成。
    • 可变聚合类型(variable-aggregate data type):构成其值的成分,数目是不确定的。

    后两种可统称为结构类型。

    抽象数据类型可用以下三元组组成:

    (D , S , P)

    其中 D 是数据对象,S 是 D 上的关系集,P 是对 D 的基本操作。

    本书采用以下格式对应抽象数据类型:

    ADT <抽象数据类型名>{

    ​ 数据对象: <数据对象的定义>

    ​ 数据关系: <数据关系的定义>

    ​ 基本操作: <基本操作的定义>

    } ADT <抽象数据类型名>

    • 其中数据对象和数据关系的定义用伪码描述。

    • 基本操作的定义是:

      <基本操作名>(<参数表>)

      初始条件: <初始条件描述>

      操作结果: <操作结果描述>

      • 初始条件:描述操作执行之前数据结构和参数应满足的条件;若不满足,则操作失败,返回相应的出错信息。
      • 操作结果:描述操作正常完成之后,数据结构的变化状况和 应返回的结果。

相关文章:

组队学习:学习者参考手册

学习者参考手册 作为希望参与组队学习活动的学习者&#xff0c;一定想了解有关本次活动的各种环节。我就通过这份手册来给大家介绍一下。 本手册一共分为四个部分&#xff0c;分别是活动角色划分&#xff0c;活动流程介绍、打卡环节介绍、角色职责介绍。 1. 大航海模型 航路…

软件测试培训适合什么人学习?

软件测试在互联网行业一直有着非常可观的发展前景&#xff0c;想要学习软件测试技术的人也越来越多&#xff0c;但不是所有人都可以学&#xff0c;都能学会的&#xff0c;小编下面就为大家详细的介绍一下软件测试培训适合什么人学习? 软件测试培训适合什么人学习?主要有以下几…

巧用组策略关闭危险端口

最直接的办法&#xff0c;把系统不用的端口都关闭掉&#xff0c;然后重新启动&#xff0c;如果杀毒软件还提示有漏洞攻击&#xff0c;你来找我. 注&#xff1a;关闭的端口有&#xff0c;135&#xff0c;137&#xff0c;138&#xff0c;139&#xff0c;445&#xff0c;1025&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 8. 软间隔与支持向量回归

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 航路开辟者&#xff1a;谢文睿、秦州开源内容&#xff1a;https://githu…

软件测试培训分享:如何划分bug的严重级别

软件测试工程师在工作中&#xff0c;最常见的就是遇见bug&#xff0c;那么所有的bug都是有轻重缓急的&#xff0c;如何划分bug的严重级别呢?本期软件测试培训分享教程就为大家做下详细的介绍。 软件测试培训分享&#xff1a;如何划分bug的严重级别?Bug的严重级别指的是软件缺…

理解 CSS 布局和块级格式上下文

本文的目的是介绍一些概念来帮你增强 CSS 码力。如标题所示这篇文章主要是讲块级格式上下文BFCBlock Formatting Context。你可能没听过这个术语但只要你曾经使用 过CSS 布局你就能明白它。理解 BFC 是什么、它如何工作、如何创建一个 BFC 是非常有用的这些能帮你更好的理解 CS…

Linux环境下用OpenJTAG实现Linux内核的源码级调试

1、通过U-boot将uzImage格式的内核加载到内存中&#xff08;可以从Flash中读取&#xff0c;也可以从U盘、SD卡读取&#xff0c;还可以通过网络&#xff09;&#xff1b; 2、登陆到OpenOCD上&#xff0c;在内核中__turn_mmu_on打上断点&#xff0c;跳过MMU&#xff08;Linux 的链…

如何在Windows中安装Python?

如何在Windows中安装Python&#xff1f; 1. Python的安装 官网下载&#xff1a;https://www.python.org/downloads/windows/ 点开上面的链接&#xff0c;会发现有很多版本。 首先看版本&#xff0c;64-bit是64位版本&#xff0c;32-bit是32位版本&#xff0c;你需要下载跟你…

Python培训教程分享:Python中选择结构是什么

越来越多的人开始报名学习Python技术&#xff0c;那么学习Python技术不是一两天就能学会的&#xff0c;本期小编为大家推荐的Python培训教程主要讲的是“Python中选择结构是什么”&#xff0c;下面来看看具体的内容&#xff0c;大家做好笔记哦。 Python培训教程分享&#xff1a…

UIWebView之获取所点位置图片URL

UIWebView有自己的UIResgure&#xff0c;如果我们手动加入自己的GestureRecognize将不能识别&#xff0c;如UILongPressGestureRecongnizer. 在浏览网页的时候&#xff0c;如果看到喜欢的图片&#xff0c;想把它保存下来如何办呢&#xff1f; 我们可以自己写一个程序来实现&…

【组队学习】【27期】青少年编程(Turtle)

青少年编程&#xff08;Turtle&#xff09; 论坛版块&#xff1a; http://datawhale.club/c/team-learning/34-category/34 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/Turtle 学习目标 针对未接触过python、或者刚接触…

linux下activemq安装与配置

一、下载&#xff1a;apache-activemq-5.14.0-bin.tar.gzhttp://activemq.apache.org/activemq-5140-release.html二、安装activemq1、gz文件拷贝到/usr/local/src目录2、解压启动tar -zxvf apache-activemq-5.14.0-bin.tar.gzcd apache-activemq-5.14.0cd bin./activemq start…

参加软件测试培训需要注意哪些

零基础同学想要学习软件测试&#xff0c;通过自学是比较难的&#xff0c;那么很多人都会考虑软件测试培训机构&#xff0c;那么参加软件测试培训需要注意哪些问题呢?来看看下面的详细介绍。 参加软件测试培训需要注意哪些? 一、科学选择培训机构 要想学到最真实有用的软件测试…

Ubuntu12.04LTS添加broadcom 802.11g无线网卡驱动

Description&#xff1a; windows下无线网驱动可用&#xff0c;切换到Ubuntu下&#xff0c;无线网驱动失效。Reason: boardcom在Ubuntu下没有安装默认的驱动&#xff0c;需要自己手动配置install。 Solution&#xff1a; 1&#xff09;有线连接网络&#xff0c;安装b43-fwcutte…

Android常用知识点回顾

开发过程中经常碰到一些问题或知识点&#xff0c;通过Baidu or Google 最终解决了问题。随后也对该知识点有了一定的掌握&#xff0c;可是过了一段时间再次碰到还是会忘记。所以该篇主要用来记录常见知识点。 山中何所有&#xff0c;岭山多白云。出自南北朝陶弘景&#xff0c;谨…

【组队学习】【27期】集成学习

集成学习 论坛版块&#xff1a; http://datawhale.club/c/32-category/32 开源内容&#xff1a; https://github.com/datawhalechina/ensemble-learning 学习目标 详细介绍了机器学习领域中最经典的算法并给出了相应的数学推导和代码&#xff0c;对于每个算法都进行了细致…

UI设计培训分享:2021年UI设计风格新风向标主要体现在哪些方面

UI设计在近几年的各大企业中显得尤为重要&#xff0c;那么随着近几年的发展&#xff0c;2021年UI设计风格新风向标主要体现在哪些方面呢?大家是否做过了解呢?如果没有&#xff0c;那么来看看下面的详细介绍就知道了。 UI设计培训分享&#xff1a;2021年UI设计风格新风向标主要…

《c陷阱与缺陷》之贪心法

在词法分析中&#xff0c;有条规则&#xff1a;每个符号应该包含尽可能多的字符&#xff0c;被称为“贪心法”或“大嘴法”。 K&R表述如下&#xff1a;如果&#xff08;编译器的&#xff09;输入流截止至某个字符之前都已经被分解为一个个符号&#xff0c;那么下一个符号将…

阿里云大数据计算服务MaxCompute(下篇)

关于阿里云大数据计算服务MaxCompute的详细内容&#xff1a; 阿里云大数据计算服务MaxCompute使用教程 &#xff08;MaxCompute&#xff08;原ODPS&#xff09;是一项大数据计算服务&#xff0c;它能提供快速、完全托管的PB级数据仓库解决方案&#xff0c;使您可以经济并高效的…

【组队学习】【27期】李宏毅机器学习

李宏毅机器学习 论坛版块&#xff1a; http://datawhale.club/c/31-category/31 开源内容&#xff1a; https://github.com/datawhalechina/leeml-notes 学习目标 李宏毅老师的机器学习视频是机器学习领域经典的中文视频之一&#xff0c;也被称为中文世界中最好的机器学习…

Python培训分享:Python新版本中的6个新特性

Python在几年做了一个全面的升级&#xff0c;此次Python升级中有6个新特性&#xff0c;本期小编为大家介绍的Python培训教程就是关于介绍Python新版本中的6个新特性的&#xff0c;来看看下面的详细介绍。 Python培训分享&#xff1a;Python 3.10 有几个新的很酷的功能&#xff…

indows上的android开发环境软件架构5

(二)实验要求&#xff1a; ? 修改按下button 显示的内容中添加上自己的学号姓名&#xff1b; ? 添加一个按钮&#xff0c;按钮名称为“退出”&#xff0c;并且为这个按钮添加事件代码&#xff0c;使得点击这个按钮后退 出程序。事件代码如下&#xff1a; FullscreenActivity.…

日志服务Flink Connector《支持Exactly Once》

摘要&#xff1a;Flink log connector是阿里云日志服务推出的&#xff0c;用于对接Flink的工具&#xff0c;包含两块&#xff0c;分别是消费者和生产者&#xff0c;消费者用于从日志服务中读数据&#xff0c;支持exactly once语义&#xff0c;生产者用于将数据写到日志服务中&a…

【组队学习】【27期】Java编程语言

Java编程语言 论坛版块&#xff1a; http://datawhale.club/c/team-learning/33-category/33 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/Java 学习目标 Java独特的面向对象的抽象类编程特点&#xff0c;广泛应用于应用…

UI培训分享:如何提升自己的UI设计能力

相信很多UI设计师在工作中经常会遇到瓶颈&#xff0c;那么如何提升自己的UI设计能力?是我们要思考的一个问题&#xff0c;下面小编就为大家分享—些建议。 UI培训分享&#xff1a;如何提升自己的UI设计能力 1、多看 国内知名的设计网站&#xff0c;比如站酷网、花瓣网、多看优…

微信小程序使用阿里巴巴iconfont字体图标

打开阿里巴巴iconfont官网(http://www.iconfont.cn/);把用到的字体图标加到项目里面; 进入到项目里面&#xff0c;选择font class方式来使用&#xff0c;如果没有生成过代码的同学点生成&#xff0c;已经有代码的直接复制代码;iconfont.pngiconfont.png4.浏览器新建页面&…

IIS6 MVC3 配置

用mvc3做了一个网站&#xff0c;重写了下URL&#xff0c;http://www.xxxx.com/news/details/54.html. 结果在iis上预览找不到页面&#xff0c;但是在vs下就没问题直接运行就没问题。 具体的原因应该是找不到映射。 所以需要在iis上添加映射。 添加MVC的解析&#xff1a; 右击II…

【组队学习】【27期】动手学数据分析

动手学数据分析 论坛版块&#xff1a; http://datawhale.club/c/team-learning/25-category/25 开源内容&#xff1a; https://github.com/datawhalechina/hands-on-data-analysis 学习目标 以项目为主线&#xff0c;通过边学&#xff0c;边做以及边被引导的方式&#xf…

参加UI培训后可以找什么工作

UI设计在近几年备受大家的关注&#xff0c;很多企业对UI设计这个岗位也显得尤为重要&#xff0c;很多人都想转型学习UI设计技术&#xff0c;大多数人选择参加UI培训机构进行系统学习&#xff0c;那么通过系统培训的同学参加UI培训后可以找什么工作呢?来看看下面的详细介绍。 参…

Datawhale组队学习周报(第021周)

本文总结了本周&#xff08;07月05日~07月11日&#xff09;Datawhale组队学习的运行情况&#xff0c;我们一直秉承“与学习者一起成长的理念”&#xff0c;希望这个活动能够让更多的学习者受益。 第 25 期组队学习一共有 3 门开源课程&#xff0c;共组建了 3 个学习群&#xf…