基础数据结构线性表

news2024/11/24 12:36:18

基础数据结构

1.基础概念

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

一般而言,数据结构的选择首先会从抽象数据类型的选择开始。一个设计良好的数据结构,应该在尽可能使用较少的时间与空间资源的前提下,为各种临界状态下的运行提供支持。数据结构可通过编程语言所提供的数据类型、引用及其他操作加以实现。

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

在许多类型的程序设计中,选择适当的数据结构是一个主要的考虑因素。许多大型系统的构造经验表明,封装的困难程度与最终成果的质量与表现,都取决于是否选择了最优的数据结构。在许多时候,确定了数据结构后便能很容易地得到算法。而有些时候,思路则会颠倒过来:例如当某个关键作业需要特定数据结构下的算法时,会反过来确定其所使用的数据结构。然而,不管是哪种情况,数据结构的选择都是至关重要的。

系统构造的关键因素是数据结构而非算法的这一深入理解,导致了多种形式化的设计方法与编程语言的出现。绝大多数的语言都带有某种程度上的模块化思想,通过将数据结构的具体实现封装隐藏于受限接口之后的方法,来让不同的应用程序能够安全地重用这些数据结构。C++、Java、Python等面向对象的编程语言可使用类来完成这一功能。

因为数据结构的重要性毋庸置疑,现代编程语言及其运行环境在标准库中都包含了多种数据结构,例如C++标准模板库中的容器、Java集合框架以及微软的.NETFramework。

大多数数据结构都由数列、记录、可辨识联合、引用等基本类型构成。举例而言,可空引用(nullablereference,一种可被置空的引用)是引用与可辨识联合的结合体,而最简单的链式结构链表则是由记录与可空引用构成。

数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。

一般而言,数据结构的选择首先会从抽象数据类型的选择开始。一个设计良好的数据结构,应该在尽可能使用较少的时间与空间资源的前提下,为各种临界状态下的运行提供支持。数据结构可通过编程语言所提供的数据类型、引用及其他操作加以实现。

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

在许多类型的程序设计中,选择适当的数据结构是一个主要的考虑因素。许多大型系统的构造经验表明,封装的困难程度与最终成果的质量与表现,都取决于是否选择了最优的数据结构。在许多时候,确定了数据结构后便能很容易地得到算法。而有些时候,思路则会颠倒过来:例如当某个关键作业需要特定数据结构下的算法时,会反过来确定其所使用的数据结构。然而,不管是哪种情况,数据结构的选择都是至关重要的。

系统构造的关键因素是数据结构而非算法的这一深入理解,导致了多种形式化的设计方法与编程语言的出现。绝大多数的语言都带有某种程度上的模块化思想,通过将数据结构的具体实现封装隐藏于受限接口之后的方法,来让不同的应用程序能够安全地重用这些数据结构。C++、Java、Python等面向对象的编程语言可使用类来完成这一功能。

因为数据结构的重要性毋庸置疑,现代编程语言及其运行环境在标准库中都包含了多种数据结构,例如C++标准模板库中的容器、Java集合框架以及微软的.NETFramework。

大多数数据结构都由数列、记录、可辨识联合、引用等基本类型构成。举例而言,可空引用(nullablereference,一种可被置空的引用)是引用与可辨识联合的结合体,而最简单的链式结构链表则是由记录与可空引用构成。

数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。

 

 

2.时间复杂度和空间复杂度

算法的时间复杂度与空间复杂度_iccoke的博客-CSDN博客_栈的时间复杂度和空间复杂度

3.线性表(顺序表和链表)

 

实际上线性表中的顺序表可以看作一个特殊的数组存储模式

我们可以在不同位置进行插入和删除操作,然后根据有效格子数和总长度对顺序表实行变更

 

这是《大话数据结构中关于顺序表的实列》

 

着就阐述了顺序表在储存数据时的便利

可以在不同的场景下进行变更,从而达到可以适应多种场景的情况

 

这是关于顺序表的存储模式的结构体的定义

有效长度改变就可以达到删除和插入的功能

而总的空间大小可以实现扩容等操作

实际上顺序表的存储模式和一维数组的存储模式是类似的

我们在插入删除时仍可以使用一维数组插入删除时的思路

 

我们通过宏定义来实现有效空间大小的

接下来我们就来实现一个顺序表

这里因为结构和一维数组类似

我们只实现部分内容

首先时顺序表的初始化

我们可以要对他的结构体中的每一项都进行初始化

用malloc申请内存来初始化我们的格子

void Init_Sqlist(struct Sqlist* sq)
{
	sq->elem = (ELEM_TYPE *)malloc(LIST_INIT_SIZE * sizeof(int));
	assert(sq->elem != NULL);
	sq->length = 0;
	sq->listsize = LIST_INIT_SIZE;
}

 其次是插入和删除

因为顺序表是有格子数和大小

因此我们需要在插入之前判断是否满

满的话进行插入失败或者扩容操作

要在删除是判空操作

bool Del_head(struct Sqlist* sq)
{
	//1插入需要判满 删除也需要判空
	if(IsEmpty(sq))
	{
		return false;
	}
	//上面if没成功,则代表有数据

	//2.待删除元素,后面的元素向前覆盖
	for(int i=1; i<sq->length; i++)
	{
		sq->elem[i-1] = sq->elem[i];
	}

	//3.有效长度-1
	sq->length--;

	return true;
}

 这是头删内容

其余和这个类似

删除时将待删除位置删掉,然后后面的数据依次往前挪动

插入时依次往后挪动

这都是一般情况

我们在尾删时可以直接改变有效个数达到不进行删除操作的删除

最后让我们看看顺序表的优缺点

 

 

 

 

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

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

相关文章

springboot整合Canal实时同步数据库表

一、Canal介绍 1、应用场景 在前面的统计分析功能中&#xff0c;我们采取了服务调用获取统计数据&#xff0c;这样耦合度高&#xff0c;效率相对较低&#xff0c;目前我采取另一种实现方式&#xff0c;通过实时同步数据库表的方式实现&#xff0c;例如我们要统计每天注册与登…

语雀的技术栈与富文本编辑讨论分享

目录前言什么是语雀富文本编辑器的发展历程语雀结构简析语雀核心语雀渲染器语雀前端技术业务层编辑器语雀编辑器演化过程语雀研发流程关于语雀的讨论为何文档编写不是一种标准化的中台能力内容类产品典型类别业务所需编辑器开发成本如何&#xff1f;文本编辑器代码编辑器公式编…

[附源码]Python计算机毕业设计SSM基于的网上拍卖系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

13.javase_动漫美女拼图实战

资料地址&#xff1a;https://cowtransfer.com/s/4573fe572f9c4a 项目效果&#xff1a; 练习编程逻辑思维&#xff0c;提高和锻炼自己能力。 一. 绘制游戏界面 1.1窗体绘制 第一个方法&#xff1a;initFrame()&#xff0c;用于窗体的基本设置 public void initFrame() { thi…

每天一个面试题:悲观锁、乐观锁,对比Hashtable和concurrentHashMap

每天一个面试题&#xff1a;悲观锁、乐观锁Hashtable和concurrentHashMap总结开始全新的学习&#xff0c;沉淀才会有产出&#xff0c;一步一脚印&#xff01; 面试题系列搞起来&#xff0c;这个专栏并非单纯的八股文&#xff0c;我会在技术的基础上&#xff0c;Debug解析&#…

戴维南定理(Thevenin‘s theorem)

戴维南定理&#xff1a;含独立电源的线性电阻单口网络N&#xff0c;就端口特性而言&#xff0c;可以等效为一个电压源和电阻串联的单口网络。电压源的电压等于单口网络在负载开路时的电压uoc&#xff1b;电阻R0是单口网络内全部独立电源为零值时所得单口网络N0的等效电阻。 例子…

JavaScript基本语法

1.JavaScript词法结构 所谓词法结构是指一套基础性规则&#xff0c;用来描述如何使用这门语言来编写程序&#xff0c;包括如下几项&#xff1a; 字符集unicode 区分大小写 &#xff08;true和TRUE&#xff09; 忽略空白字符&#xff08;空格、制表符和换行符&#xff09…

UG鼠标和键盘操作

UG鼠标和键盘操作角色操作鼠标操作选择放大/缩小旋转平移确认适合窗口正视于X/Y/Z视图显示样式九宫图设置键盘操作ESCF8角色操作 角色包含了用户的自定义配置&#xff0c;包括内容、演示、快捷键、工具栏等&#xff0c;通过&#xff1a;菜单-首选项-用户界面-角色 进行导入导出…

【C语言程序设计】实验 8

目录 1. 整数排序 2. 二维数组按每行数据之和升序 3. 字符串排序 4. 二维数组各行元素之和 5. 二位整数数组交换两行 6. 插入排序 7. 10进制转2进制&#xff0c;8进制和16进制数&#xff08;数组&#xff09; 1. 整数排序 【问题描述】从键盘输入n(0<n<21)个整…

微服务同时接入多个Kafka

准备工作 自己搭建一个Kafka 从官方下载Kafka&#xff0c;选择对应Spring Boot 的版本&#xff0c;好在Kafka支持的版本范围比较广&#xff0c;当前最新版本是3.2.1,支持2.12-3.2.1 范围的版本&#xff0c;覆盖了Spring Boot 2.0x-Spring Boot 3.0.x。Apache Kafka 解压安装 …

CMake中target_compile_definitions的使用

CMake中的target_compile_definitions命令用于向target添加编译定义&#xff0c;其格式如下&#xff1a; target_compile_definitions(<target><INTERFACE|PUBLIC|PRIVATE> [items1...][<INTERFACE|PUBLIC|PRIVATE> [items2...] ...]) 指定在编译给定的<…

网络原理初识

网络原理初识 文章目录网络原理初识网络发展历程独立模式网络互联IP地址端口号网络协议OSI七层TCP/ IP协议封装与分用封装一.应用层二.传输层三.网络层四.数据链路层五.物理层分用六.物理层七.数据链路层八.网络层九.传输层十.应用层网络发展历程 独立模式 一开始电脑之间是相…

【InnoDB ClusterSet】快速部署

快速部署 InnoDB ClusterSet 文章目录快速部署 InnoDB ClusterSet前言前期准备架构设计部署过程1. 使用配置账号通过 MySQL Shell 连接到 InnoDB Cluster 任一成员2. 为主 InnoDB Cluster 实例设置变量3. 创建以当前集群作为主集群的 ClusterSet4. 为每个独立服务器实例添加配置…

382. 链表随机节点-哈希表法

382. 链表随机节点-哈希表法 给你一个单链表&#xff0c;随机选择链表的一个节点&#xff0c;并返回相应的节点值。每个节点 被选中的概率一样 。 实现 Solution 类&#xff1a; Solution(ListNode head) 使用整数数组初始化对象。 int getRandom() 从链表中随机选择一个节点…

Vue Element动态生成的表单如何用 el-form 校验

<el-form :model"dynamicValidateForm" ref"dynamicValidateForm" label-width"100px" class"demo-dynamic"><el-form-item prop"email" label"邮箱" :rules"[{ required: true, message: 请输入…

研究良久,终于发现了他代码写的快且bug少的原因

前言 读者诸君&#xff0c;今日我们适当放松一下&#xff0c;不钻研枯燥的知识和源码&#xff0c;分享一套高效的摸鱼绝活。 我有一位程序员朋友&#xff0c;当时在一个团队中开发Android应用&#xff0c;历经多次考核后发现&#xff1a; 在组内以及与iOS团队的对比中: 他的任…

java项目请求url存在特殊字符 400错误

java项目请求url特殊字符 400错误 1 现象 请求路径带特殊字符&#xff0c;就会400错误&#xff0c;这就泄露了服务器版本和报错信息&#xff0c;无疑是敏感信息泄露&#xff0c;实属安全漏洞。 补充项目环境&#xff1a;springmvc、tomcat 8.5.59 2 原因 经排查和报错信息…

STM32--ADC模数转换器

学习江科大自化协stm32教程记录的笔记 ADC模数转换器 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 DAC是数字-模拟转换器&#xff0c;但是P…

AI 助你轻松剪视频 # AutoCut

如果你还在犯愁每次剪视频都要反复听才能下手&#xff0c;不妨试试AutoCut , AI 大神李沐开源的一个剪辑神器&#xff0c;使用 Python 开发&#xff0c;它可以通过字幕来剪切视频。AutoCut 对你的视频自动生成字幕。然后你选择需要保留的句子&#xff0c;AutoCut 将对你视频中对…

C语言:变量的深入理解

文章目录一.什么是变量C语言中为什么要有类型&#xff1f;C语言中的类型为什么有这么多种呢&#xff1f;定义变量的本质为什么需要定义变量定义变量的本质定义变量时的规则二.深刻理解signed/unsigned定义的变量1.运算时的符号位2.数据的存储情况3.unsigned定义时的小细节三.大…