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

目录

一、绪论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.mfbz.cn/a/357545.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql之基本查询

基本查询 一、SELECT 查询语句 一、SELECT 查询语句 查询所有列 1 SELECT *FORM emp;查询指定字段 SELECT empno,ename,job FROM emp;给字段取别名 SELECT empno 员工编号 FROM emp; SELECT empno 员工编号,ename 姓名,job 岗位 FROM emp; SELECT empno AS 员工编号,ename …

数据结构-数组(详细讲解)

文章目录 数组数组的概述数组的图示一维数组二维数组 数组的定义一维数组的定义二维数组的定义 数组的取值赋值一维数组二维数组 数组的操作一维数组的操作索引实现指针实现 二位数组的操作矩阵转三元组矩阵的乘法 数组 数组的概述 概述:数组是一种线性数据结构&a…

【机器学习300问】21、什么是激活函数?常见激活函数都有哪些?

在我写的上一篇文章中介绍了感知机(单个神经元)的构成,其中就谈到了神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出值。这也称为“神经元被激活”。如果想对神经网络是什么有更多了解的…

网络防御保护——课程笔记

一.防火墙 防火墙的主要职责:控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之后做出对应的动作。 防火墙的分类 防火墙的发展进程 防火墙的控制 带内管理 --- 通过网络环境对设备进行控制 --- telnet,ssh,web --- 登录设备…

【Go 快速入门】包及依赖管理 | Go 第三方包发布 | 接口 | 反射

文章目录 包和依赖管理依赖管理go modgo get go.mod 文件go.sum 文件Go Modules 发布包 接口空接口接口值类型断言 反射reflect.TypeOfreflect.ValueOf结构体反射 项目代码地址:04-PackageInterfaceReflection 包和依赖管理 Go 使用包来支持代码模块化和代码复用&…

【Django开发】前后端分离美多商城项目:项目准备和搭建(附代码,文档)

本系列文章md笔记(已分享)主要讨论django商城项目开发相关知识。本项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django Jinja2模板引擎 Vue.js实现…

分表过多引起的问题/Apache ShardingSphere元数据加载慢

目录 环境 背景 探寻 元数据的加载策略 如何解决 升级版本到5.x 调大max.connections.size.per.query max.connections.size.per.query分析 服务启动阶段相关源码 服务运行阶段相关源码 受到的影响 注意事项(重要) 其他 环境 Spring Boot 2…

数据结构3、基于栈的后缀算术表达式求值

1 题目描述 图1 中缀表达式转化为后缀表达式题目描述 图2 基于栈的后缀算术表达式求值题目描述 2 题目解读 借助一个运算符栈,可将中缀表达式转化为后缀表达式;借助一个运算数栈,可对后缀表达式求值。借助一个运算符栈和一个运算数栈&#xf…

MongoDB安装以及卸载

查询id: docker ps [rootlocalhost ~]# docker stop c7a8c4ac9346 c7a8c4ac9346 [rootlocalhost ~]# docker rm c7a8c4ac9346 c7a8c4ac9346 [rootlocalhost ~]# docker rmi mongo sudo docker pull mongo:4.4 sudo docker images 卸载旧的 sudo docker stop mong…

Win10无法完成更新正在撤销更改的解决方法

在Win10电脑操作过程中,用户看到了“无法完成更新正在撤销更改”的错误提示,这样系统就不能成功完成更新,不知道如何操作才能解决此问题?以下小编分享最简单的解决方法,帮助大家轻松解决Win10电脑无法完成更新正在撤销…

BIO、NIO编程与直接内存、零拷贝

一、网络通信 1、什么是socket? Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,一般由操作 系统提供。客户端连接上一个服务端,就会在客户端中产生一个 socket 接口实例,服务端每接受 一个客户端…

【Linux网络编程】网络编程套接字(1)

【Linux网络编程】网络编程套接字(1) 目录 【Linux网络编程】网络编程套接字(1)源IP地址和目的IP地址端口号端口号和进程ID的关系 网络通信TCP协议UDP协议网络字节序socket编程接口简单的UDP网络程序 作者:爱写代码的刚子 时间:2024.1.29 前言&#xff1…

SV-7101T网络音频终端 网络对讲终端

SV-7101是一款IP网络广播终端,主要作为网络播放器使用,其接收网络的音频数据,提供音频输出。SV-7101与服务器主控软件、有源音箱配套使用可实现主控室对HG7101终端进行定时打铃、实时语音广播和紧急广播等功能。 淘宝速购: SV-701…

Android中属性property_get和property_set的详细用法介绍

1,property_get和property_set的作用说明 在Android操作系统中,property_get和property_set是用于获取和设置系统属性的函数。这些属性通常用于存储和读取配置信息,例如设备配置、网络设置、系统参数等。 property_get函数用于获取指定属性…

websocket 通信协议

websocket是什么 答: 它是一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 意思就是服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息 属于服务器推送技术的一种. 为什么需要websocket? 疑问?…

(五)MySQL的备份及恢复

1、MySQL日志管理 在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了 数据库中数据丢失或被破坏可能原因: 误删除数据…

MySQL原理(二)存储引擎(3)InnoDB

目录 一、概况: 1、介绍: 2、特点: 二、体系架构 1、后台线程 2、内存池(缓冲池) 三、物理结构 1、数据文件(表数据和索引数据) 1.1、作用: 1.2、共享表空间与独立表空间 …

【C/C++ 05】快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序算法,其基本思想是:任取待排序序列中的某元素作为基准值,按照该基准值将待排序集合分割成两个子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于…

MySQL原理(二)存储引擎(1)概述

一、存储引擎介绍 1、概念: (1)MySQL中的数据用各种不下同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎…

【数据结构与算法】7.详解队列的基本操作

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢…
最新文章