【数据结构入门精讲 | 第一篇】打开数据结构之门

news2024/9/25 1:17:27

在这里插入图片描述

数据结构与算法是计算机科学中的核心概念,也与现实生活如算法岗息息相关。鉴于全网数据结构文章良莠不齐且集成度不高,故开设本专栏,为初学者提供指引。

目录

    • 基本概念
    • 数据结构为何面世
    • 算法
    • 基本数据类型
      • 抽象数据类型
      • 使用抽象数据类型的好处
    • 数据结构
    • 常见的数据结构
    • 常用算法

基本概念

数据结构(data structure)是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。

不同种类的数据结构适合于不同种类的应用,而部分甚至专门用于特定的作业任务。例如,计算机网络依赖于路由表运作,B 树高度适用于数据库的封装。

数据结构为何面世

随着应用程序变得越来越复杂和数据越来越丰富,几百万、几十亿甚至几百亿的数据就会出现,而对这么大对数据进行搜索、插入或者排序等的操作就越来越慢,数据结构就是用来解决这些问题的。

算法

算法是在一类特定的数据模型上定义所有运算并以解决一类特定问题为目标的一个有限的运算序列,它与数据结构是息息相关的。

算法实现的三要素

    数据:算法需要处理的数据是算法的输入,也是算法的输出。数据包括各种数据类型(如整数、浮点数、字符串、数组、链表、树等),以及数据结构(如栈、队列、堆、图等)。

    运算:算法的核心是运算,包括各种基本运算(如加、减、乘、除、取模等)、比较运算(如大于、小于、等于等)、逻辑运算(如与、或、非等)等。此外,算法还可以包括一些高级运算(如快速幂、快速排序、动态规划等),以及各种库函数的调用。

    控制:算法的执行流程需要通过控制来实现。控制包括顺序结构、选择结构、循环结构和函数调用等。顺序结构表示按照代码的书写顺序依次执行各个语句;选择结构包括if语句和switch语句,用于根据条件选择不同的分支;循环结构包括for循环、while循环和do-while循环,用于重复执行某个代码块;函数调用用于将代码分解成多个可重用的模块,提高代码的可读性和可维护性。

算法的描述载体:自然语言、数据流图、程序语言或者伪代码

算法的五大特征

输入:具有零个或多个输入,这些输入取自特定的数据对象集合

输出:至少具有一个或多个输出,这些输出同输入之间存在某种特定的关系

确定性(双重含义):组成算法的每条指令是清晰的、无歧义的;无二义性,对应相同的输入仅有唯一的一条算法执行路径

有限性:序列项数有限且每一项运算时间有限

可行性:∀合法输入 ∃正确输出

注意:程序可以不满足有限性,即程序可以无限循环执行,而算法必须是有限的

基本数据类型

数据类型是指高级程序设计语言中,用以刻划程序中操作对象的特性。类型显式地或隐含地规定了在程序执行期间变量或表达式所有可能的取值范围,以及在这些值上允许进行的操作。

抽象数据类型

抽象数据类型是基本数据类型概念的引伸和发展,指操作对象的一个数据模型以及定义在该模型上的一组操作。 也就是说,对于抽象数据类型的描述,除了必须描述它的数据结构外,还必须描述定义在它上面的运算(过程或函数)。

抽象数据类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。

抽象数据类型的内容需要:约定抽象数据类型的名字 、约定在该类型上定义的一组运算的各个运算的名字 、明确各个运算分别有多少个参数、这些参数的含义和顺序以及运算的功能

抽象数据类型的目标:

把数据类型的表示和数据类型上运算的实现,与其在程序中的应用分开,相互独立 ;顶层和底层都与抽象数据类型的定义打交道;算法底层的设计就是数据结构的设计和函数的设计

使用抽象数据类型的好处

顶层设计和底层实现分离、算法设计和数据结构设计分离 、数据模型和运算的内在统一于抽象数据类型之中、局部化、模块化、编出来的程序结构清晰,层次分明,便于程序正确性的证明和复杂性的分析

数据结构

数据结构的结构指的是数据之间的逻辑关系以及数据在计算机中的存储方式。数据的逻辑结构是从具体问题抽象出来的数学模型,反映成分数据之间的逻辑关系,它与数据的存储无关。数据的物理结构是在计算机中的存储和实现方法,包括数据结构中元素的表示及元素间关系的表示。

常见的数据结构

栈(Stack): 栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。

队列(Queue): 队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。

数组(Array): 数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。

链表(Linked List): 链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。

树(Tree): 树是典型的非线性结构,它是包括 2 个结点的有穷集合 K。

图(Graph): 图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。

堆(Heap): 堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。

散列表(Hash table): 散列表源自于散列函数(Hash function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录。

常用算法

数据结构研究的内容就是如何按一定的逻辑结构,把数据组织起来,并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。算法研究的目的是为了更有效的处理数据,提高数据运算效率。数据的运算是定义在数据的逻辑结构上,但运算的具体实现要在存储结构上进行。一般有以下几种常用运算:

  • 检索: 检索就是在数据结构里查找满足一定条件的节点。一般是给定一个某字段的值,找具有该字段值的节点。
  • 插入: 往数据结构中增加新的节点。
  • 删除: 把指定的结点从数据结构中去掉。
  • 更新: 改变指定节点的一个或多个字段的值。
  • 排序: 把节点按某种指定的顺序重新排列。例如递增或递减。

基础性概念介绍完毕,不同数据结构的实现会在后面的文章中阐发。

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

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

相关文章

利用Pytorch预训练模型进行图像分类

Use Pre-trained models for Image Classification. # This post is rectified on the base of https://learnopencv.com/pytorch-for-beginners-image-classification-using-pre-trained-models/# And we have re-orginaized the code script.预训练模型(Pre-trained models)…

【SpringBoot】进阶之自定义starter(一起了解自定义starter的魅力)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringBoot开发》。🎯🎯…

解决设备能耗管理问题,易点易动来帮忙!

设备能耗管理是现代企业可持续发展的重要环节,然而,许多企业在设备能耗管理方面面临一系列问题: 能耗数据收集困难:企业需要监控和管理大量设备的能耗情况,但传统的手动方式收集能耗数据耗时耗力,无法实时获…

Python中的TesserOCR:文字识别的全方位指南

更多资料获取 📚 个人网站:ipengtao.com 文字识别在图像处理领域中起到了至关重要的作用,而TesserOCR(Tesseract OCR的Python封装)为开发者提供了一个强大的工具,使得文字识别变得更加便捷。本文将通过详细…

电声器件是什么

电声器件 电子元器件百科 文章目录 电声器件前言一、电声器件是什么二、电声器件的类别三、电声器件的应用实例四、电声器件的作用原理总结前言 电声器件在多种应用中起着重要作用,如家庭娱乐系统、音响设备、通信设备、汽车音响、舞台表演、声音检测和录音等领域。它们的设计…

新版Spring Security6.2案例 - Authentication用户名密码

前言: 前面有翻译了新版Spring Security6.2架构,包括总体架构,Authentication和Authorization,感兴趣可以直接点链接,这篇翻译官网给出的关于Authentication的Username/Password这页。 首先呢,官网就直接…

RHEL7.5编译openssl1.1.1w源码包到rpm包

openssl1.1.1w下载地址 https://www.openssl.org/source/ 安装依赖包 yum -y install curl which make gcc perl perl-WWW-Curl rpm-build wget http://mirrors.aliyun.com/centos-vault/7.5.1804/os/x86_64/Packages/perl-WWW-Curl-4.15-13.el7.x86_64.rpm rpm -ivh pe…

tuxera2023破解版免费下载 NTFS for Mac读写工具(附序列号)

Tuxera ntfs 2023 破解安装包是一个mac读写ntfs磁盘工具允许您访问,它允许您访问NFTS 驱动器上的文件。 该应用程序提供访问访问Mac 设备中NFTS 格式文件的驱动力,因此您有权基于格式文件进行无困难的访问Windows 数据。 在发生电力灾难或断电时使用防损…

重新认识Word——给图、表、公式等自动编号

重新认识Word——给图、表、公式等自动编号 给图增加题注题注失败的情况给图添加“如图xx-xx所示” 给公式插入题注第一步——先加题注第二步——设置两个制表符 解决题注“图一-1”的问题 前面我们已经学习了如何引用多级列表自动编号了,现在我们有第二个问题&…

汽车清除积碳和清洗节气门

汽车清除积碳和清洗节气门 汽车需要清除积碳的部位检查积碳方法: 清除积碳和清洗节气门风险:燃油宝 第一次清除积碳1万公里2万公里3万公里--5万公里6万公里以上 汽车需要清除积碳的部位 节气门喷油嘴进气道燃烧室 检查积碳方法: 建议每3到5…

基于javaweb实现的实践教学基地管理系统

一、系统架构 前端:html | js | css | bootstrap 后端:spring | springmvc | mybatis-plus 环境:jdk1.8 | mysql8 | tomcat | maven 二、代码及数据库 三、功能介绍 01. web-首页1 02. web-首页2 03. web-首页3 04. web-首页4 05. 管…

智能冶钢厂环境监控与设备控制系统(边缘物联网网关)

目录 1、项目背景 2、项目功能介绍 3、模块框架 3.1 架构框图 3.2 架构介绍 4、系统组成与工作原理 4.1 数据采集 4.2 指令控制 4.3 其他模块 4.3.1 网页、qt视频流 4.3.2 qt搜索进程 5、成果呈现 6、问题解决 7、项目总结 1、项目背景 这个项目的背景是钢铁行业的…

【算法Hot100系列】无重复字符的最长子串

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

学习MS Dynamics AX 2012编程开发 1. 了解Dynamics AX 2012

在本章中,您将了解开发环境的结构以及Microsoft Dynamics AX中的开发人员可以访问哪些工具。在本书的第一步演练之后,您将很容易理解著名的Hello World代码,您将知道应用程序对象树中的不同节点代表什么。 以下是您将在本章中学习的一些主题…

Python-docx 深入word源码 自定义字符间距

代码和实现效果 from docx import Document from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.shared import Pt# 调整pt设置字间距 def SetParagraphCharSpaceByPt(run, pt1):通过修改word源码方式, 添加w:spacing标签直接通过调整pt来设置字符间距…

软件设计中如何画各类图之七了解组件图:系统架构的关键视角

目录 1 前言2 组件图基本介绍3 画组件图的步骤4 组件图的用途5 场景及实际场景举例6 结语 1 前言 组件图是一种UML的图形化表示工具,为系统架构提供了重要视角。它描述了系统中各个组件以及它们之间的依赖关系和连接。用于展示系统中的组件、软件模块、以及它们之间…

成绩分级 C语言xdoj53

问题描述 给出一个百分制的成绩&#xff0c;要求输出成绩等级A,B,C,D,E。90分以上为A&#xff0c;80~89分为B,70~79分为C,60~69分为D&#xff0c;60分以下为E。 输入说明 输入一个正整数m&#xff08;0<m<100&#xff09; 输出说明 输出一个字符 输入样例 …

麦肯锡:2023年最被关注的科技趋势

1 近期&#xff0c;麦肯锡咨询公司公布了颇具影响力的《McKinsey Technology Trends Outlook 2023》报告&#xff0c;旨在通过其技术委员会的洞察力&#xff0c;揭示2023年可能改变商业舞台的15个技术趋势。报告的编撰不仅为企业和投资者提供了宝贵的方向指引&#xff0c;同时…

『 Linux 』重新理解挂起状态

文章目录 &#x1f984; 前言新建状态 &#x1f40b;挂起状态 &#x1f40b;唤入唤出 &#x1f40b;进程与操作系统间的联系 &#x1f40b; &#x1f984; 前言 『 Linux 』使用fork函数创建进程与进程状态的查看中提到了对挂起状态的一个理解&#xff1b; ​ 挂起状态相比于其…

【计算机组成体系结构】只读存储器ROM

一、ROM分类 二、计算机中重要的ROM 运行时操作系统在主存中&#xff0c;但是由于RAM断电后数据会丢失&#xff0c;所以操作系统都存储在辅存中&#xff0c;在开机时由CPU读入主存&#xff0c;而BIOS芯片就是用来存储自举装入程序的&#xff0c;它用于开机时引导把操作系统装入…