刨析数据结构(一)

news2024/11/17 23:39:55

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


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

目录

一.数据结构是啥?

二.常见的数据结构

三.数据结构三要素

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.coloradmin.cn/o/1423234.html

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

相关文章

【百度Apollo】轨迹绘制:探索路径规划和可视化技术的应用

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…

element -table,多行或列合并

需求&#xff1a;后端返回的表格数据&#xff0c;如果某列值一样&#xff0c;前端表格样式需要合并他们&#xff0c;需要合并的列的行数未知&#xff08;所以需要有数据后遍历后端数据对需要合并的属性进行计数&#xff09;即动态遍历表格合并 效果 - 重点方法&#xff1b;ta…

html+css+js 我的学校网页设计与制作实例(6个页面)

一、作品介绍 HTMLCSSJS网页设计与制作&#xff0c;我的学校网页设计与制作实例&#xff0c; 本实例适合于初学HTMLCSSJS的同学。该案例里面有divcss的样式布局设置&#xff0c;这个实例比较全面&#xff0c;有一级页、二级页、详情页、输入表单等&#xff0c;共6个页面。本文…

编写python脚本调用ordinals以及BRC20的接口

初始版本 #!/usr/bin/python3from flask import Flask, request, jsonify import subprocess import json import osapp Flask(__name__)ord_cmd ["/root/ord/target/release/ord", "--cookie-file/data/btcregtest/data/regtest/.cookie", "--rpc…

C#使用RabbitMQ-4_路由模式(直连交换机)

简介 RabbitMQ中的路由模式是一种根据Routing Key有条件地将消息筛选后发送给消费者的模式。在路由模式中&#xff0c;生产者向交换机发送消息时&#xff0c;会指定一个Routing Key。交换机接收生产者的消息后&#xff0c;根据消息的Routing Key将其路由到与Routing Key完全匹…

基于腾讯云自然语言处理 NLP服务实现文本情感分析

文章目录 一、前言二、NLP 服务简介三、Python 调用腾讯云 NLP 服务 SDK 构建情感分析处理3.1 开通腾讯云 NLP 服务3.2 创建的腾讯云持久证书&#xff08;如果已创建请跳过&#xff09;3.2 在腾讯云服务器中安装 Git 工具以及 Python 环境3.3 安装 qcloudapi-sdk-python3.4 部署…

Linux 文件IO

目录 linux下的文件分类&#xff1a; 文件描述符原理&#xff1a;&#xff08;底层原理&#xff0c;可跳过&#xff09; 虚拟文件系统&#xff1a; 内存中的inode与磁盘中的inode open函数 函数原型&#xff1a; 形参列表&#xff1a; 代码&#xff1a; close函数 er…

CTF-WEB的入门真题讲解

EzLogin 第一眼看到这个题目我想着用SQL注入 但是我们先看看具体的情况 我们随便输入admin和密码发现他提升密码不正确 我们查看源代码 发现有二个不一样的第一个是base64 意思I hava no sql 第二个可以看出来是16进制转化为weak通过发现是个弱口令 canyouaccess 如果…

计算机网络-调度算法-2(时间片轮转 优先级调度算法 多级反馈队列调度算法 多级队列调度算法)

文章目录 总览时间片轮转时间片大小为2时间片大小为5若按照先来先服务算法 优先级调度算法例题&#xff08; 非抢占式优先级调度算法&#xff09;例题&#xff08; 抢占式优先级调度算法&#xff09;补充 思考多级反馈队列调度算法例题 小结多级队列调度算法 总览 时间片轮转 …

排序链表---归并--链表OJ

https://leetcode.cn/problems/sort-list/submissions/499363940/?envTypestudy-plan-v2&envIdtop-100-liked 这里我们直接进阶&#xff0c;用时间复杂度O(nlogn)&#xff0c;空间复杂度O(1)&#xff0c;来解决。 对于归并&#xff0c;如果自上而下的话&#xff0c;空间复…

sqlmap的使用

2024.1.31 sqlmap支持五种不同的注入模式&#xff1a; 1、布尔盲注2、时间盲注3、报错注入4、联合注入5、堆叠注入 检测注入 GET请求的基本格式 ​python sqlmap.py -u <测试网址> Ps:不知道为什么我的sqlmap使用时前面要加python&#xff0c;而大部分其他教程没提到…

3d模型导入草图大师模型变乱什么原因怎么解决?---模大狮模型网

3D模型在导入草图大师后出现混乱可能有多种原因&#xff0c;以下是一些可能的原因和解决方法&#xff1a; 模型尺寸问题&#xff1a;如果3D模型的尺寸在导入草图大师时与画布尺寸不匹配&#xff0c;可能导致模型混乱。解决方法是在3D建模软件中调整模型的尺寸&#xff0c;使其适…

五大架构风格之一:数据流风格

数据流风格详细介绍 系统架构数据流风格是一种软件体系结构风格&#xff0c;它强调了系统内部不同部分之间的数据流动。这种风格侧重于描述系统中的数据处理过程&#xff0c;以及数据是如何从一个组件传递到另一个组件的。以下是系统架构数据流风格的详细介绍&#xff1a; 1 基…

idea激活教程(2020.1.4及以上版本)

首先点击试用版本&#xff0c;进入软件&#xff0c;再依次进行一下操作 一、在idea的Plugins配置中添加Z大的插件市场 上图中加载出来的插件是默认的&#xff0c;大家不用在意&#xff0c;直接点击“Manage Plugin Repositoryies…”打开配置弹窗 点击号&#xff0c;添加一行…

【C/C++】C/C++编程——整型(一)

整型 C 中的整型是基本的数据类型之一&#xff0c;用于表示没有小数部分的数。这包括正整数、负整数以及零。C 提供了多种整型&#xff0c;以适应不同大小的数值需求和优化内存使用。 整型的种类 C 中的整型可以根据其大小&#xff08;即占用的字节数&#xff09;和能够表示…

【C++】类和对象_1_定义和定义域

1.类的定义&#xff1a; class className {//类体&#xff1a;由成员函数和成员变量组成 };//注意后面的分号class为定义类的关键字&#xff0c;ClassName为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分号不能省略。 类体中内容称为类的成员&#x…

Nginx 部署指定文件夹下的项目(本地测试)

1、配置 vue.config.js&#xff0c;指定生成环境的包 //部署生产环境和开发环境下的URLpublicPath: process.env.NODE_ENV production ? "/marketing" : "/",///npm run build 或 varn build 生成文件的日录名称(要利baseUrl的牛产环境路一致)(默认dist…

【每日一题】2670. 找出不同元素数目差数组-2024.1.31

题目&#xff1a; 2670. 找出不同元素数目差数组 给你一个下标从 0 开始的数组 nums &#xff0c;数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示&#xff0c;其中 diff[i] 等于前缀 nums[0, ..., i] 中不同元素的数目 减去 后缀 nums[i …

Django模型(二)

一、更新数据库表结构 不管是新增模型,还是修改已有模型后,只需要执行行命令即可: 1.1、创建迁移 在项目根目录的cmd中运行: $ python manage.py makemigrations model_app备注 model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备…

linux 磁盘标签类型MBR转换为GPT

[rootlocalhost /]# fdisk -l 磁盘 /dev/sda&#xff1a;299.4 GB, 299439751168 字节&#xff0c;584843264 个扇区 Units 扇区 of 1 * 512 512 bytes 扇区大小(逻辑/物理)&#xff1a;512 字节 / 512 字节 I/O 大小(最小/最佳)&#xff1a;512 字节 / 512 字节 磁盘标签类…