刨析数据结构(一)

🌈个人主页:小田爱学编程
🔥 系列专栏:数据结构————"带你无脑刨析"
🏆🏆关注博主,随时获取更多关于数据结构的优质内容!🏆🏆


😀欢迎来到小田代码世界~
😁 喜欢的小伙伴记得一键三连哦 ૮(˶ᵔ ᵕ ᵔ˶)ა

目录

一.数据结构是啥?

二.常见的数据结构

三.数据结构三要素

1.逻辑结构: 

2.物理结构:

3.数据运算:

四.数据结构基本概念

1.数据:

2.数据元素

3.数据对象

4.数据结构

4.数据类型

5.抽象数据类型

6.逻辑结构

7.物理结构(存储结构)

8.算法

 五.线性表

六.顺序表

1.顺序表的定义

2.顺序表的分类 

1.静态顺序表

2.动态顺序表

3.创建文件

4.初始化

5.增加元素:

6.删除元素

7.修改元素

8.查找元素

 七.顺序表的局限性


一.数据结构是啥?

     🌏数据结构是由“数据”和“结构”两词组合而来。

     🔥1,2,3,4(数据)按照一定规律组织在一起(结构)

     👨‍🚀数据结构是计算机存储、组织数据的方式

     🌏数据结构+算法=程序

二.常见的数据结构

  1. 数组 
  2. 链表 
  3. 队列 
  4. 散列表 

三.数据结构三要素

1.逻辑结构: 

 由数据元素之间的逻辑关系构成

2.物理结构:

由数据元素之间的逻辑关系构成

3.数据运算:

施加在数据上的运算包括运算的定义和实现。

四.数据结构基本概念

1.数据:

数据是能描述客观事物的数值,字符以及能输入机器且能被处理的各种符号集合

2.数据元素

组成数据结构的基本单位

3.数据对象

性质相同的数据元素的的集合,是数据的一个子集

4.数据结构

 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合

4.数据类型

数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称

数据类型其实包含了数据结构,注意“一个值的集合”,这个值可以是原子类型的值集和结构类型的值集,而结构类型的值集就是数据结构。这里的数据结构指的是它的定义而不是它的实现

按值来分————————原子类型(不可再分) 结构类型(可以再分)

5.抽象数据类型

  抽象数据类型(Abstract Date Type,简称 ADT):指从问题中抽象出来的一个数据模型以及定    义在此数据模型上的一组操作,不考虑计算机的具体存储结构与运算的具体实现算法。

6.逻辑结构

 DS = ( D, S )   【Data Structure】 D:数据集合 R:关系集合

根据数据元素之间关系的不同特征,通常有下列4类基本结构,复杂程度依次递进。

①集合:结构中的数据元素之间除了同属于一个集合外,没有其他的关系。

②线性结构:线性结构中的数据元素之间是一对一的关系。

③树形结构:树形结构中的数据元素之间是一对多的关系。

④图状结构或网状结构:结构中的元素之间是多对多的关系。

7.物理结构(存储结构)

逻辑结构在计算机的存储映象

数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像。对应的两种不同的存储结构分别是顺序存储结构和链式存储结构

8.算法

对特定问题求解步骤的一种描述,是为解决一个或一类问题给出的一个确定的、有限长的操作

特性:有限性 确定性 可行性 输入 输出

评价算法性能:算法执行时间与占用存储的空间

算法复杂度,大方面来看分为时间复杂度空间复杂度

空间复杂度(规模有无关系)

 五.线性表

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

线性表的数据集合为{a1,a2,…,an},假设每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。

在较复杂的线性表中,一个数据元素可以由若干个数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称为文件

👍我们想从最简单的开始:顺序表

 🥇🥇🥇正片开始喽

六.顺序表

1.顺序表的定义

 类比:数组是顺序表的封装

2.顺序表的分类 

  静态顺序表.动态顺序表

1.静态顺序表

2.动态顺序表

3.创建文件

  1. SeqList.h :数据的各种准备,接口的各种准备

  2. SeqList.c : 函数如何实现

  3.   test.c:测试操作是否成功

4.初始化

typedef int SLDataType
typedef struct SeqList
{
   SLDataType*arr//数据的底层结构
   int capacity;//顺序表的空间大小
   int size;//有效个数
}SL
void SLInit(SL*ps)//顺序表的初始化
void SLDestory(SL*ps)//顺序表的销毁
void SLInit(SL*ps)
{
  PS->arr=NULL;
  PS->size=ps->capcity=0;
}
void SLPrint(SL*ps)
{ 
for (int i=0;i<ps->size;i++)
 {
    printf("%d ",ps->arr[i]);
 }
printf("\n")
}
 

5.增加元素:

void SLPushBack(SL*ps,SLDataType X)//头插
void SLPushDate(SL*ps,SLDataType X)//尾插
void SLInsert(SL* ps, int pos, SLDataType x);//中间插
void SLCheckCapacity(SL* ps) //扩容
void SLCheckCapacity(SL* ps) {
	if (ps->size == ps->capacity) {
		int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;
		SLDataType* tmp = (SLDataType*)realloc(ps->arr, newCapacity * sizeof(SLDataType));
		if (tmp == NULL) {
			perror("realloc fail!");
			exit(1);
		}
		//扩容成功
		ps->arr = tmp;
		ps->capacity = newCapacity;
	}
}
	//空间不够,扩容
	SLCheckCapacity(ps);
	//空间足够,直接插入
	ps->arr[ps->size++] = x;
}//尾插
void SLPushFront(SL* ps, SLDataType x) {
	assert(ps);
	//判断是否扩容
	SLCheckCapacity(ps);
	//旧数据往后挪动一位
	for (int i = ps->size; i > 0; i--) 
	{
		ps->arr[i] = ps->arr[i - 1]; 
	}
	ps->arr[0] = x;
	ps->size++;//头插
void SLInsert(SL* ps, int pos, SLDataType x) {
	assert(ps);
	assert(pos >= 0 && pos <= ps->size);
	SLCheckCapacity(ps);
	//pos及之后的数据往后挪动一位,pos空出来
	for (int i = ps->size; i > pos;i--)
	{
		ps->arr[i] = ps->arr[i - 1]; 
	}
	ps->arr[pos] = x;
	ps->size++;
}任意位置插

 6.删除元素

void SLPopBack(SL* ps);
void SLPopFront(SL* ps);
void SLErase(SL* ps, int pos);
void SLPopBack(SL* ps) {
	assert(ps);
	assert(ps->size);
	ps->size--; //ps->arr[ps->size - 1] = -1==ps->size--
    //尾删
void SLPopFront(SL* ps) {
	assert(ps);
	assert(ps->size);
	for (int i = 0; i < ps->size - 1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size--;
}//头删
void SLErase(SL* ps, int pos) {
	assert(ps);
	assert(pos >= 0 && pos < ps->size);

	//pos以后的数据往前挪动一位
	for (int i = pos; i < ps->size - 1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size--;
}指定位置删除

 7.修改元素

void SLModify(SL* ps, int pos, SLDataType x)
void SLModify(SL* ps1, int pos, SLDataType x)
{
	assert(ps1);
	assert(0 <= pos && pos < ps1->size);
	ps1->arr[pos] = x;
}

8.查找元素

void SLFind(SL* psl, SLDatatype x)
void SLFind(SL* ps, SLDatatype x)
{
	assert(ps);
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->arr[i] == x)
		{
			return i;
		}
	}
	return -1;
}

 七.顺序表的局限性

1.中间/头部的插⼊删除,时间复杂度为O(N)

2.增容需要申请新空间,拷⻉数据,释放旧空间。会有不小的消耗
3.增容⼀般是呈2倍的增⻓,势必会有⼀定的空间浪费。例如当前容量为100,满了以后增容到
200,我们再继续插⼊了5个数据,后⾯没有数据插入了,那么就浪费了95个数据空间

这种的局限性已经被我们的计算机前辈给解决了,如果你想知道怎么解决,请持续关注😀

🥇🥇🥇  新的专栏:数据结构————"带你无脑刨析"博主正在火速创作中,可以关注博主一下   哦!φ(゜▽゜*)♪o(* ̄▽ ̄*)ブ[●´︶`●]

🎁🎁🎁今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,您的支持就是我前进的动力!

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

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

相关文章

chromedriver安装和环境变量配置

chromedriver 1、安装2、【重点】环境变量配置&#xff08;1&#xff09;包的复制&#xff1a;&#xff08;2&#xff09;系统环境变量配置 3、验证 1、安装 网上随便搜一篇chromedriver的安装文档即可。这里是一个快速链接 特别提醒&#xff1a;截止2024.1.30&#xff0c;chr…

计算机网络_1.3电路交换、分组交换和报文交换

1.3电路交换、分组交换和报文交换 一、电路交换1、“电路交换”例子引入2、电路交换的三个阶段3、计算机之间的数据传送不适合采用电路交换 二、分组交换1、发送方&#xff08;1&#xff09;报文&#xff08;2&#xff09;分组&#xff08;3&#xff09;首部 2、交换节点3、接收…

酒店|酒店管理小程序|基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 &#xff08;1&#xff09;系统首页 &#xff0…

【fabrc.js】 创建组(fabric.Group)类型的 3 种方式

方法1&#xff1a;先选中已存在画布内多个图形&#xff0c;然后拿到ActiveSelection数据&#xff0c;随后调用 toGroup() 即可将选中的图形创建为组对象&#xff1b;方法2&#xff1a;new fabric.Group() 获取group实例&#xff0c;通过new的时候传入图形参数[o1,o2...]&#x…

【代码能力提升 | 代码阅读学习】分析 VoxelNet 的 主干

文章目录 前言代码分析VoxelNet model2.数据处理2.1单个样本处理2.2处理成batch 最后&#xff0c;附上我一步步调试代码&#xff0c;到3D-conv 前言 代码来自&#xff1a;https://github.com/skyhehe123/VoxelNet-pytorch 其中 测试数据来自&#xff1a;https://github.com/ga…

python爬虫之豆瓣首页图片爬取

网址&#xff1a;https://movie.douban.com/ import requests from lxml import etree import re url https://movie.douban.com headers {User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/5…

CGAL5.4.1 边塌陷算法

目录 1、使用曲面网格的示例 2、使用默认多面体的示例 3、使用丰富多面体的示例 主要对1、使用曲面网格的示例 进行深度研究 CGAL编译与安装CGAL安装到验证到深入_cgal测试代码-CSDN博客 参考资料CGAL 5.4.5 - Triangulated Surface Mesh Simplification: User Manual …

卡片式 UI 设计的 8 个秘诀,让你轻松打造高颜值界面

做卡片设计最重要的是什么&#xff1f;我将在这篇文章中分享 8 最关键的细节。在此之前&#xff0c;让我们一起来对付一下。 UI 梳理卡片设计的基础&#xff0c;总结哪些场景适合卡片设计。 卡片是 UI 其中一个组件元素可以创建一个清晰的视觉单元&#xff0c;使信息更具逻辑性…

expect 语言 Here Document 多行重定向

一、expect是什么 1.1 expect定义 是建立在tcl&#xff08;tool command language&#xff09;语言基础上的一个工具&#xff0c;常被用于进行自动化控制和测试&#xff0c;解决shell脚本中交互的相关问题 1.2 怎么安装expect yum install -y expect 进行安装 二、怎么使用e…

力扣hot100 电话号码的字母组合 回溯

Problem: 17. 电话号码的字母组合 文章目录 思路复杂度&#x1f49d; Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 复杂度 时间复杂度: O ( 3 8 ) O(3^8) O(38) 空间复杂度: O ( 3 8 ) O(3^8) O(38) &#x1f49d; Code class Solution {String[] map { "…

实战项目(二)汽车保养管家系统

一、实现技术 前端技术&#xff1a;html、javascript(jquery、ajax、json)、css、layui 后端技术&#xff1a;java、mysql、servlet 开发工具&#xff1a;eclipse、vscode 二、项目描述 基于web的汽车保养管家系统的设计与实现 一、功能需求 1&#xff0e;用户功能 1.1…

《Pandas 简易速速上手小册》第1章:Pandas入门(2024 最新版)

文章目录 1.1 Pandas 简介1.1.1 基础知识1.1.2 案例&#xff1a;气候变化数据分析1.1.3 拓展案例一&#xff1a;金融市场分析1.1.4 拓展案例二&#xff1a;社交媒体情感分析 1.2 安装和配置 Pandas1.2.1 基础知识1.2.2 案例&#xff1a;个人财务管理1.2.3 拓展案例一&#xff1…

力扣 55.跳跃游戏

思路&#xff1a; 从后往前遍历&#xff0c;遇到元素为0时&#xff0c;记录对应的下标位置&#xff0c;再向前遍历元素&#xff0c;看最大的跳跃步数能否跳过0的位置&#xff0c;不能则继续往前遍历 代码&#xff1a; class Solution { public:bool canJump(vector<int>…

ip https证书多少钱

IP https证书是一种数字证书&#xff0c;用于在网络传输中保护数据的机密性和完整性。它通过使用SSL&#xff08;安全套接层&#xff09;协议&#xff0c;在客户端和服务器之间建立一条加密通道&#xff0c;确保数据在传输过程中不会被窃取或篡改。而IP https证书的价格和它的品…

基于springboot的视频点播系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

5G智慧钢铁厂数字孪生三维可视化,推进钢铁新型工业化数字化转型

5G智慧钢铁厂数字孪生三维可视化&#xff0c;推进钢铁新型工业化数字化转型。随着科技的不断发展&#xff0c;数字化转型已经成为钢铁企业转型升级的必经之路。而5G技术的广泛应用&#xff0c;为钢铁企业数字化转型提供了新的机遇。其中&#xff0c;5G智慧钢铁厂数字孪生三维可…

SpringCloud_学习笔记_1

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

Android Studio 安装配置教程 - Windows版

Android Studio下载 安装&#xff1a; 下载&#xff1a; Android Studio Hedgehog | 2023.1.1 | Android Developers (google.cn) 安装&#xff1a; 基本不需要思考跟着走 默认下一步 默认下一步 自定义修改路径&#xff0c;下一步 默认下一步&#xff0c;不勾选 默认下一…

GEE移除landsat collection 1数据集

简介 大家好&#xff0c;我是锐多宝&#xff0c;今天刷twitter时&#xff0c;看到了这样一篇文章&#xff1a; Google earth engine宣布从 2024 年7月1日开始&#xff0c;将完全移除 Landsat Collection 1数据集&#xff0c;并推荐大家将使用Collection 1的代码改为使用Colle…

centOS+nodejs+mysql阿里云部署前后端个人网站

centOSnodejsmysql阿里云部署前后端个人网站 参考&#xff1a; 部署NodeExpressMySQL项目到阿里云轻量应用服务器 阿里云轻量应用服务器部署Node.jsReactMongoDB前后端分离项目 参考&#xff1a;在阿里云上部署nodejs服务 https 部署的原理就是你在本地测试的时候在地址栏&am…