【数据结构】(一)从绪论到各种线性表

news2024/12/26 17:44:55

目录

一、绪论Introduction

1、数据结构

2、逻辑结构(数据元素之间的相互关系)

3、物理结构(数据逻辑结构在计算机中的存储形式)

4、数据类型(一组性质相同的值的集合及定义在此集合上的一些操作的总称)

5、算法

二、线性表List

1、基本概念


一、绪论Introduction

1、数据结构

(1)数据结构是研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。

(2)数据元素:组成数据的有一定意义的基本单位,也被称为记录。

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

(4)数据对象:性质相同的数据元素的集合,数据的子集。

(5)结构:不同数据元素之间非独立而是存在特定的关系。

2、逻辑结构(数据元素之间的相互关系)

(1)集合结构:数据元素除了同属于一个集合范围内,它们之间就没有其他关系。

(2)线性结构:数据元素之间是一对一的关系。

(3)树形结构:数据元素之间存在一对多的层次关系。

(4)图形结构:数据元素之间是多对多的关系。从左到右依次为集合、线性表、树、图结构

3、物理结构(数据逻辑结构在计算机中的存储形式)

(1)顺序存储结构:把数据元素存放在地址连续的存储单元里。

(2)链式存储结构:把数据元素存放在任意存储单元里,通过地址找到相关联数据元素位置。

4、数据类型(一组性质相同的值的集合及定义在此集合上的一些操作的总称)

(1)原子类型:不可再分的,包括整型、实型、字符型等。

(2)结构类型:可再分解的,例如整型数组是由若干个整型数据组成的。

(3)抽象数据类型ADT(Abstract Data Type):一个数学模型及定义在该模型上的一组操作,体现了程序设计中问题分解、抽象和信息隐藏的特性。

5、算法

(1)算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,每条指令执行一或多个操作。

(2)基本特性:输入、输出、有穷性、确定性和可行性。

(3)设计要求:正确性、可读性、健壮性、时间效率高和存储量低。

(4)效率度量方法:事后统计(写好程序比较编译运行时间)和事前分析估算(在编程前对算法估算)

(5)程序运行时间:依赖于算法好坏、问题输入规模(执行量的多少)。

(6)函数的渐近增长:给定函数f(n)和g(n),若 ∃ N ∈ Z,使所有n > N,f(n)总是比g(n)大,那么就说f(n)增长渐近快于g(n)。

(7)算法的时间复杂度:大O记法。

(i) 用常数1取代运行时间中的所有加法常数,即O(1)。

(ii) 在修改后的运行次数函数中只保留最高阶项。

(iii) 最高阶项的系数为1,得到结果就是大O阶。

常见时间复杂度如下:

常见时间复杂度所耗费时间从小到大依次是:

(8)算法的空间复杂度:即对计算机的内存占用空间需求。

二、线性表List

1、基本概念

(1)线性表是零或多个数据元素的有限序列。

(2)数组长度指存储空间长度,线性表长度指数据元素个数

(3)顺序存储结构的三个属性:数组data,数组长度MAXSIZE,线性表当前长度length;查找时间复杂度为O(1),插入删除的时间复杂度为O(n)。

插入算法思路:

(i) 如果插入位置不合理,抛出异常;

(ii) 如果线性表长度 ≥ 数组长度,则抛出异常或动态增加容量;

(iii) 从最后一个元素开始向前遍历到第 i 个位置,分别将它们都向后移动一个位置;

(iv) 将要插入的元素填入位置i处,表长+1即可。

删除算法思路:

(i) 如果删除位置不合理,抛出异常;

(ii) 取出删除元素;

(iii) 从删除元素位置开始遍历到最后一个元素位置,将它们都向前移动一个位置,表长-1即可。

(4)链式存储结构,查找时间复杂度为O(n),插入删除时间复杂度为O(1)。

(i) 结点(Node)包含数据域(存储数据元素信息)和指针域(存储直接后继位置)。

(ii) n个结点连接成一个链表,即线性表的链式存储结构。

(iii) 链表第一个结点的存储位置称为头指针(链表的必要元素),最后一个结点指针为空NULL

(iv) 常在单链表的第一个结点前附设一个结点,称为头结点,其数据域可以不存储任何信息,指针域则存储指向第一个结点的指针。头结点非必需元素,若线性表为空表,则头结点指针域为空NULL。

假设p是指向线性表第 i 个元素的指针,则数据域表示为p -> data,值为数据元素;指针域表示为p -> next,值为一个指针,指向第 i+1个元素,关系如下图所示:

(5)静态链表:用数组描述的链表

(i) 数组元素都由data和cur组成,前者存放数据元素,后者相当于单链表中的指针,存放该元素的后继在数组的下标。如下将甲、乙、丙、丁、戊等数据存入静态链表:

 

(ii) 优点是在插入删除操作中只需要修改cur而不用移动元素,缺点是仍连续存储,表长难以确定。

(6)循环链表(Circular Linked List):终端结点的指针由空NULL改为指向头结点即形成循环。

(7)双向链表(Double Linked List):每个结点再额外设置一个指向其前驱结点的指针域即可。

双向链表的结点表示关系有p -> next -> prior相当于 p 也相当于p -> prior -> next。

(i)插入操作顺序思路:s -> prior = p; s -> next = p -> next; p ->next ->prior = s; p ->next = s;

 

(ii)删除操作顺序思路:p -> prior -> next = p ->next; p ->next ->prior = p -> prior; free (p);

 

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

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

相关文章

幻兽帕鲁服务器多少钱?2024年Palworld游戏主机费用

幻兽帕鲁服务器多少钱?价格便宜,阿里云4核16G幻兽帕鲁专属服务器32元1个月、66元3个月,4核32G配置113元1个月、339元3个月;腾讯云4核16G14M服务器66元1个月、277元3个月、1584元一年。阿腾云atengyun.com分享阿里云和腾讯云palwor…

Python算法题集_找到字符串中所有字母异位词

本文为Python算法题集之一的代码示例 题目438:找到字符串中所有字母异位词 说明:给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字…

Java基础—面向对象OOP—18三大特性:封装、继承与多态

由于本身理解还不是很到位,所以写的很绕,后续待补充优化 1、封装(底层):该露的露,该藏的藏 高内聚:类的内部数据操作细节自己完成,不允许外部干涉低耦合:仅暴露少量的方…

休息日的思考与额外题——链表

文章目录 前言链表知识点 一、 92. 反转链表 II二、21. 合并两个有序链表总结 前言 一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油! 二刷决定精刷了,于是参加了卡子哥的刷题班,训练…

2023年算法SAO-CNN-BiLSTM-ATTENTION回归预测(matlab)

2023年算法SAO-CNN-BiLSTM-ATTENTION回归预测(matlab) SAO-CNN-BiLSTM-Attention雪消融优化器优化卷积-长短期记忆神经网络结合注意力机制的数据回归预测 Matlab语言。 雪消融优化器( SAO) 是受自然界中雪的升华和融化行为的启发,开发了一种…

Linux true/false区分

bash的数值代表和其它代表相反:0表示true;非0代表false。 #!/bin/sh PIDFILE"pid"# truenginx进程运行 falsenginx进程未运行 checkRunning(){# -f true表示普通文件if [ -f "$PIDFILE" ]; then# -z 字符串长度为0trueif [ -z &qu…

shell脚本——条件语句

目录 一、条件语句 1、test命令测试条件表达式 2、整数数值比较 3、字符串比较 4、逻辑测试(短路运算) 5、双中括号 二、if语句 1、 分支结构 1.1 单分支结果 1.2 双分支 1.3 多分支 2、case 一、条件语句 条件测试:判断某需求是…

IP关联是什么?有什么后果?如何防止电商账号因IP关联被封?

在跨境电商的世界里,IP关联给多账号运营的商家带来了挑战。比如,亚马逊IP关联规则的执行对于那些经营多个店铺的卖家来说可能是一个不小的障碍。IP关联的影响不只是限于亚马逊,其他平台如Instagram、Facebook也有类似的机制,在之前…

Note-归一化层和前向源码

本专栏主要是深度学习/自动驾驶相关的源码实现,获取全套代码请参考 目录 简介BN层计算过程参数说明验证问题:bn层前面的cov不需要bia的原因 LN层计算过程参数说明验证问题:transfomer用LN而不是BN的原因 简介 深度学习中常见的归一化层包括批量归一化(Batch Norma…

应急响应-流量分析

在应急响应中,有时需要用到流量分析工具,。当需要看到内部流量的具体情况时,就需要我们对网络通信进行抓包,并对数据包进行过滤分析,最常用的工具是Wireshark。 Wireshark是一个网络封包分析软件。网络封包分析软件的…

Redis面试(二)

1.Redis集群了解吗 前面说到了主从同步存在高可用和分布式问题,哨兵机制解决了高可用问题,而集群就是终极方案,一举解决高可用 和分布式问题。 1.数据分区:数据分区或称数据分片是集群最核心的功能,集群将数据分散到…

【人工智能】鲁滨逊归结原理-Python实现

一、实验目的 了解鲁滨逊归结算法原理,利用Python编写程序,实现鲁滨逊归结算法。 二、实验原理 鲁滨逊归结原理又称为消解原理,是鲁滨逊提出的一种证明子句集不可满足性,从而实现定理证明的一种理论及方法。它是机器定理证明的基…

项目解决方案:市小区高清视频监控平台联网整合设计方案(上)

目 录 一、项目需求 1.1业务需求 1.2技术需求 1.3 环境要求 1.3.1 硬件要求 1.3.2 技术服务要求 二、系统设计方案 2.1 视频监控平台基础功能设计 2.2 视频资源及联网设备编码与管理设计 2.2.1 全省现有联网视频资源属性 2.2.2 视频资源编码具体格…

任务修复实例(1)

实例1 任务名:增强防御(quest_template.id 8490) 涉及的两个数据表分别为 smart_script 和 creature_summon_groups smart_script Reactstate 取值参考源码 UnitDefines.h 的 ReactStates 定义,其中:0为被动&#…

第18章_JDK8-17新特性(下)(新语法结构,API的变化,其它结构变化,小结与展望)

文章目录 第18章_JDK8-17新特性(下)6. 新语法结构6.1 Java的REPL工具: jShell命令6.2 异常处理之try-catch资源关闭6.3 局部变量类型推断6.4 instanceof的模式匹配6.5 switch表达式6.6 文本块6.7 Record6.8 密封类 7. API的变化7.1 Optional类…

[docker] Docker镜像的创建以及Dockerfile的使用

一、Dokcer镜像的创建 创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 1.1 基于现有镜像创建 (1)首先启动一个镜像,在容器里做修改docker run -it --name web centos:7 /bin/bash …

Docker 基础篇

目录 一、Docker 简介 1. Docker 2. Linux 容器 3. 传统虚拟机和容器的对比 4. Docker 的作用 5. Docker 的基本组成(Docker 三要素) 6. Docker 工作原理 7. Docker 架构 8. Docker 下载 二、Docker 安装 1. CentOS Docker 安装 2. CentOS8 …

03 Verilog HDL 语法

Verilog HDL(Hardware Description Language)是在 C 语言的基础上发展起来的一种硬件描述语言(用它可以表示逻辑电路图、逻辑表达式、数字逻辑系统所完成的逻辑功能等)具有灵活性高、易学易用等特点。Verilog HDL 可以在较短的时间…

Edius 9.0 下载安装教程,附安装包和工具,轻松解决软件安装

前言 Edius是一款非线性视频编辑软件,它可以帮助用户快速编辑一切,支持更多格式、更多分辨率而无需等待,无论是纪录片还是4K影视制作,软件都能很好的驾驭,是用户最喜欢的后期制作专业工具。 准备工作 1、Win7及以上…

如何做一个合格的产品经理

如何做一个合格的产品经理 如何做一个合格的产品经理 一、了解市场需求 产品经理的核心工作之一是了解市场需求。为了确保产品的成功,你需要密切关注市场动态,了解用户需求,分析竞争对手,并预测未来趋势。通过市场调查、用户访…