刨析数据结构(一)

🌈个人主页:小田爱学编程
🔥 系列专栏:数据结构————"带你无脑刨析"
🏆🏆关注博主,随时获取更多关于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…

软考笔记--数据库设计与建模

数据库设计是指对一个给定的应用环境&#xff0c;提供一个确定最有数据模型与处理模式的逻辑设计&#xff0c;以及一个确定数据库存储结构与存取方法的物理设计&#xff0c;建立起能反映显示世界信息和信息联系及满足用户数据要求和加工要求&#xff0c;以能够被某个DBMS所接受…

【链表】-Lc328-基于奇偶节点拆分链表(oddHead,oddTail,evenHead,evenTail)

写在前面 最近想复习一下数据结构与算法相关的内容&#xff0c;找一些题来做一做。如有更好思路&#xff0c;欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.代码 写在后面 一、场景描述 给定一个单链表&#xff0c;把所有的 奇数节点 和 偶数节点 分别排在一起…

红队打靶练习: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;包括字体、图…

公众项目评估方法

本文由群狼调研&#xff08;社会舆情调查&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。公众项目评估方法可以根据项目的性质、规模和目标受众的特点而有所不同。以下是一些常用的公众项目评估方法&#xff1a; 1.调查问卷&#xff1a;设计并实施调查问卷&…

NetCore iText7 根据PDF模板 导出PDF文件

iText 7 是一个用于处理 PDF 文件的流行的开源库&#xff0c;它提供了丰富的功能&#xff0c;包括创建、编辑和处理 PDF 文档。它支持 .NET 平台&#xff0c;因此可以在 .NET Core 中使用该库来处理 PDF 文件。 使用 iText 7&#xff0c;您可以进行以下操作&#xff1a; 1. 创…

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

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

Little云盘测试用例

Little云盘实现了用户的注册、登录&#xff0c;上传文件&#xff0c;下载文件&#xff0c;预览文件&#xff08;支持视频预览&#xff09;&#xff0c;删除文件&#xff0c;创建文件夹&#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项目…