刨析数据结构(一)

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


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

目录

一.数据结构是啥?

二.常见的数据结构

三.数据结构三要素

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(* ̄▽ ̄*)ブ[●´︶`●]

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

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

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

相关文章

GenAI时代的市场供需,新的平台机会#a16z

这是一篇发表在a16z的文章&#xff0c;文中的观点非常值得我们学习。我花了点时间对原文进行梳理&#xff0c;挑选/补充了一些信息&#xff0c;分享给大家。 a16z.com/marketplaces-in-the-age-of-ai AI时代的市场 作者&#xff1a;Olivia Moore 虽然供需市场的商业模式是不变的…

【algorithm】一个简单的PID工程 base 用于手生时候快速复习 用于设计模式 cpp语法八股 快速复习校验

写在前面 最近项目一直用matlab&#xff0c;防止手生整一个回忆工具使用的简单的pid demo&#xff0c;走一边流程&#xff0c;包括配工程debug看结果&#xff0c;复用之前记录的配置见我的bloghttps://blog.csdn.net/weixin_46479223/article/details/135082867?csdn_share_t…

红队打靶练习:INFOSEC PREP: OSCP

目录 信息收集 1、arp 2、nmap WEB 信息收集 wpscan dirsearch ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 ho…

地理空间数据科学进阶

目录 写在开头1. 地理编码基础1.1 地理编码的基本原理1.1.1 坐标系统1.1.2 地名解析1.1.3 编码算法1.2 Python中使用地理编码的基础知识1.2.1 百度地图API1.2.2 高德地图API1.2.3 腾讯地图API1.3 Python中实现代码2. 逆地理编码2.1 利用Python进行逆地理编码2.1.1 获取高德地图…

监测Tomcat项目宕机重启脚本(Linux)

1.准备好写好的脚本 #!/bin/sh # 获取tomcat的PID TOMCAT_PID$(ps -ef | grep tomcat | grep -v tomcatMonitor |grep -v grep | awk {print $2}) # tomcat的启动文件位置 START_TOMCAT/mnt/tomcat/bin/startup.sh # 需要监测的一个GET请求地址 MONITOR_URLhttp://localhost:…

java 图书管理系统 spring boot项目

java 图书管理系统ssm框架 spring boot项目 功能有管理员模块&#xff1a;图书管理&#xff0c;读者管理&#xff0c;借阅管理&#xff0c;登录&#xff0c;修改密码 读者端&#xff1a;可查看图书信息&#xff0c;借阅记录&#xff0c;登录&#xff0c;修改密码 技术&#…

Yalmip学习笔记

这里写自定义目录标题 基本用法变量定义关于大MBilevel programming 注&#xff1a;这篇文章主要是留给自己查漏补缺的&#xff0c;所以从来没有使用过yalmip的读者看着会觉得跳来跳去。 基本用法 建模开始前&#xff0c;使用yalmip(clear)清空Yalmip的内部数据库。 下面是一个…

【战报】2023年11月25日PMP考试战报来袭!!

项目管理认证 PMP项目管理课程介绍 PMP成绩查询及电子版证书下载-CSDN博客文章浏览阅读501次&#xff0c;点赞9次&#xff0c;收藏4次。2025.11.25的PMP考试成绩出来了&#xff01;https://blog.csdn.net/XMWS_IT/article/details/135939596?spm1001.2014.3001.5501 2023年1…

DSP系统时钟总结

一、stm32中断偏移向量介绍 1.1 为什么要设置中断向量偏移 上图可以看出程序上电先进入0x08000000开始运行&#xff0c;紧接着执行复位中断向量&#xff0c;然后执行复位中断程序&#xff0c;然后进入main函数。 如果想要app的中断正常运行&#xff0c;那就必须手动设置中断向…

C语言——深入理解指针3

目录 1. 数组名的理解1. 数组名1.2 数组名理解的特例 2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序4.1 冒泡排序的概念4.2 冒泡排序的优化 5. 二级指针5.1 二级指针的概念5.2 二级指针的运算 6. 指针数组7. 指针数组模拟二维数组 1. 数组名的理解 1. 数组名 在上⼀个…

Python武器库开发-武器库篇之pdf文件暴力破解(五十二)

Python武器库开发-武器库篇之pdf文件暴力破解(五十二) PDF&#xff08;Portable Document Format&#xff0c;便携式文档格式&#xff09;是由Adobe公司开发的一种文件格式。PDF文件被广泛用于以可靠方式共享和传输电子文档。它能够保留文档的原始格式&#xff0c;包括字体、图…

[C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!

一&#xff0c;题目 遇到的一道算法题&#xff1a; 1&#xff0c;已知有一个数字矩阵&#xff08;row行&#xff0c;col列&#xff09;&#xff0c;矩阵的每行 从左到右 递增&#xff0c;每列 从上到下 递增。 2&#xff0c;现输入一个数字 num &#xff0c;判断数字矩阵中…

微信小程序之下拉刷新事件、上拉触底事件和案例

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

趣学Python算法100例-1.1 抓交通肇事犯

1&#xff0e;问题描述 一辆卡车违反交通规则&#xff0c;撞人后逃跑。现场有三人目击该事件&#xff0c;但都没有记住车号&#xff0c;只记下了车号的一些特征。甲说&#xff1a;牌照的前两位数字是相同的&#xff1b;乙说&#xff1a;牌照的后两位数字是相同的&#xff0c;但…

vue核心知识点

一、Vue基础知识点总结 开发vue项目的模式有两种&#xff1a; 基于vue.js&#xff0c;在html中引入vue.js&#xff0c;让vue.js管理div#app元素。基于脚手架环境&#xff1a;通过vue脚手架环境可以方便的创建一个通用的vue项目框架的模板&#xff0c;在此基础之上开发vue项目…

Python面向对象编程:探索代码的结构之美

文章目录 一、引言二、为什么学习面向对象编程2.1 提高代码的可维护性&#xff1a;通过封装、继承和多态实现模块化设计2.2 提升代码的复用性&#xff1a;通过类和对象的创建实现代码的重用 三、类和对象的基本概念3.1 类和对象的定义和关系&#xff1a;类是对象的模板&#xf…

【劳德巴赫 Trace32 高阶系列 3 -- trace32 svf 文件操作命令】

请阅读【嵌入式开发学习必备专栏 之 Trace32 系列 】 文章目录 Trace32 SVF 文件操作命令JTAG.PROGRAM.autoJTAG.PROGRAM.SVF命令参数介绍IRPREIRPOSTDRPREDRPOSTInitStateIgnoreTDOVerbose使用示例Trace32 SVF 文件操作命令 JTAG.PROGRAM.auto Format: JTAG.PROGRAM.</

elk之安装和简单配置

写在前面 本文看下elk的安装和简单配置&#xff0c;安装我们会尝试通过不同的方式来完成&#xff0c;也会介绍如何使用docker&#xff0c;docker-compose安装。 1&#xff1a;安装es 1.1&#xff1a;安装单实例 下载es安装包 在这里 下载&#xff0c;下载后解压到某个目录…

通过Nacos权重配置,实现微服务金丝雀发布效果(不停机部署)

在微服务项目迭代的过程中&#xff0c;不可避免需要上线&#xff1b;上线对应着部署&#xff0c;或者升级部署&#xff1b;部署对应着修改,修改则意味着风险。 传统的部署都需要先停止旧系统&#xff0c;然后部署新系统&#xff0c;之后需要对新系统进行全面的功能测试&#xf…

用STM32手搓一个体温计

前言 市面上大多额温计、测温计精度偏差太大。 而水银温度计&#xff0c;等待时间又太久。 因此就产生了用STM32自己做一个——精度高、便宜、测速快 的产品级 温度仪/体温计的想法。 01 这个温度仪的亮点&#xff1f; ”1精度高&#xff0c;误差小于0.1度 2带有显示屏&a…