重生之我 学习【数据结构之顺序表(SeqList)】

news/2024/9/17 19:07:08/ 标签: 算法, 数据结构, c语言, 开发语言, 学习

⭐⭐⭐

新老博友们,感谢各位的阅读观看

期末考试&假期调整暂时的停更了两个多月

没有写博客为大家分享优质内容

还容各位博友多多的理解

美丽的八月重生之我归来

继续为大家分享内容

你我共同加油

一起努力

⭐⭐⭐

数据结构将以顺序表、链表、栈区、队列、二叉树、常见排序算法为主要内容展开学习

这里的数据结构是C语言实现的

道阻且长,行则将至

🌹博主:宝哈 CSDN主页🌹

期待与你的交流学习

说在前面的话

数据结构是计算机存储、组织数据的方式,指的是相互之间存在的一种或多种特定关系的数据元素集合。数据本就是杂乱无章的,当我们对数据进行管理,形成一定的结构体系,数据才能有序存放便于我们存储和使用。数据结构将着力提升大家的算法能力,前期的C语言只是简单的为大家罗列了一些简答的知识点,现在我们将打开代码学习的魔幻大门,或许到这里我们才算得上代码学习刚入门。

前面我们已经学习了语言的基本内容:数组、指针、结构体、动态内存管等内容,这些都为今天我们学习数据结构做了铺垫,开启代码学习的新篇章——数据结构 ,在日常生活中我们要处理大量的数据,数据的统一管理,便于我们对数据增删查改,一些数据的内容过于庞大,高效便捷的管理需要我们对这些数据进行处理,那么如何处理好这些数据,就是我们接下来要学习的内容。


线性表

先来介绍线性表

线性表在实际应用中非常广泛,比如数组、栈、队列等都可以看作是线性表的不同形式或在不同操作限制下的特殊结构,理解和掌握线性表对于深入学习数据结构至关重要。

物理结构:数据在内存中存储的一种形式

逻辑结构:人为想想出的一种数据结构形式,如线性关系、

线性表在逻辑结构上一定是线性的,在物理结构上不一定是线性的

今天介绍的顺序表是线性表的一种


顺序表(Sequence List)分类

顺序表:是⽤⼀段 物理地址连续的存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组 
存储。

顺序表的底层逻辑是数组,在数组的基础上增加了增删查改的功能完成对数组的封装。

可以这样理解顺序表: 

顺序表=数组+增加数据+删除数据+修改数据+查找数据

前期学习的数组,我们知道数组可分为静态数组和动态数组,静态的数组的大小往往限制我们都数据进行一系列的操作,动态数组更受大家的青睐。

/*静态数组*/
int shuzu[10]={ }/*动态数组 动态数组内存开辟*/
int* shuzu/*确定好大小后再去申请*/

顺序表中对数组进行封装会使用结构体进行

静态顺序表

顺序表的空间已经确定,空间少了不够用空间多了浪费空间。

当空间过小会造成数据的丢失,空间远大于目前需求量需要资金的支持较大。

/*静态顺序表的定义*/struct Seqlist
{
int arr[100]; //定长数组(在预估范围内操作)
int size;     //当前有效数据的个数};//静态顺序表
typedef int SLDataType     //替换第四行的int
#define N 10               
typedef struct SeqList {SLDataType a[N];      //int被代替后 便于替换int size;
}SL;

动态顺序表

解决了静态数据表的痛点

/*动态顺序表的定义*/
struct Seqlist
{int*shuzu;   //int size;    //有效数据的个数 实际空间大小int capacity;//空间的大小 容器的能存量
};//动态顺序表
typedf struct SeqList
{SLDateType* a;int size;int capacity;}SL;

一键替换:这里使用typedef内容更换,方便代码量庞大时的替换数据的类型


动态数据表的实现

在实际的操作中通常我们需要三个文件来实现顺序表的功能:

一个.h头文件:头插文件用于存放顺序表的定义、接口声明、引用的头文件。等同于目录

两个.c源文件:顺序表各函数的实现

                        测试顺序表的各功能

我们创建了三个文件进行创建后进行初始化,并对初始化的第一步进行了测试(详见下图)

出现上述问题的原因在于对传值和传地址的理解

⭐传值:

实参保存的值拷贝一份给形参,实参和形参指向的是两块不同的地址,但保存的数据是一样的(形参是实参的值真实拷贝)

⭐传地址:

形参指向的就是实参的地址

初始化

头文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef int SLDataTyre;
//动态顺序表
typedef struct SeqList			
//等同于typedef struct SeqList SL;
{SLDataTyre* arr;int size;	//有效数据个数int capacity;//空间大小
}SL;//初始化顺序表
void SLInit(SL* ps);//销毁顺序表
void SLDestory(SL*ps);//插入数据
void SLPushBack(SL* ps, SLDataTyre x);void SLPushFront(SL* ps, SL
源文件(实现功能文件)
#include"seqencelist.h"
//初始化顺序表
void SLInit(SL* ps)
{ps->arr = NULL;ps->size = 0;ps->capacity = 0;//初始的数组为空 有效数据和空间大小都为0
}
//销毁顺序表
void SLDestory(SL* ps)
{if (ps->arr)//(pa->arr!=NULL){free(ps->arr);//释放空间}ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}void SLPushBack(SL* ps, SLDataTyre x)
{}void SLPushFront(SL* ps, SLDataTyre x)
{}
源文件(测试文件)
#include"seqencelist.h"
void SLText01()
{SL s;SLInit(&s);
}
int main()
{SLText01();return 0;
}

尾插

空间充足时

在顺序表的末尾加入数据,size++

空间不足时

新增容(增容一般是成倍数增加的),再在顺序表的末尾加入数据,size++

增容

增容操作本身就会对程序的性能进行一定的消耗,频繁的增容会导致程序的效率低下,采用成倍数的增加方式,一般情况下空间增量和数据的个数是正相关的

头插

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];}//下标为0的位置ps->arr[0] = x;ps->size++;}

⭐下一篇将带来顺序表的剩余内容和单链表


http://www.ppmy.cn/news/1507369.html

相关文章

获取客户端真实IP

出于安全考虑&#xff0c;近期在处理一个记录用户真实IP的需求。本来以为很简单&#xff0c;后来发现没有本来以为的简单。这里主要备忘下&#xff0c;如果服务器处于端口回流&#xff08;hairpin NAT&#xff09;,keepalived&#xff0c;nginx之后&#xff0c;如何取得客户端的…

nlohmann::json使用中文字符闪退,使用try-catch得到invalid UTF-8

nlohmann::json的字符串需要的编码是UTF-8&#xff0c;我使用wmi得到的信息字符串中的字符编码与其不相符&#xff0c;从而出现Exception。 参考文章链接&#xff1a; github中大佬的解决方法&#xff1a; nlohmann::json评论区 对于我使用的字符wchar_和函数WideCharToMultiBy…

C++设计模式(代理模式)

1. 电话虫 在海贼中&#xff0c;有一种神奇的通信工具叫做电话虫&#xff08;Den Den Mushi&#xff09;&#xff0c;外形如蜗牛&#xff0c;身上带有斑点或条纹或通体纯色&#xff0c;壳顶上有对讲机或按键&#xff0c;不接通时会睡觉&#xff0c;接通时会惊醒&#xff0c;并发…

LVS 调度器 nat和DR模式

lvs-nat 修改请求报文的目标IP,多目标IP的DNAT 配置网络 LVS主机 注意网卡的顺序 &#xff08;nat和主机模式&#xff09; [rootlvs ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection [connection] idens160 typeethernet interface-nameens160 ​ [ip…

Java封装原生ES

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.spring-data-es操作ES1.引入依赖2.application.yml配置uris3…

【Story】编译器的基础概念与类型分类

目录 编译器详解1. 编译器的工作流程1.1 词法分析&#xff08;Lexical Analysis&#xff09;词法分析的例子 1.2 语法分析&#xff08;Syntax Analysis&#xff09;语法分析的例子 1.3 语义分析&#xff08;Semantic Analysis&#xff09;语义分析的例子 1.4 中间代码生成&…

漏洞复现-Atlassian Confluence Data Center 与 Server 存在权限绕过漏洞 (CVE-2023-22518)

1.漏洞描述 Atlassian Confluence Server是澳大利亚Atlassian公司的一套具有企业知识管理功能&#xff0c;并支持用于构建企业WiKi的协同软件的服务器版本。 Atlassian Confluence Data Center 和 Confluence Server存在安全漏洞&#xff0c;该漏洞源于授权管理不当。 2.影响…

vscode 快速生成vue 格式

1.用快捷Ctrl Shift P唤出控制台 输入“Snippets”并选择 Snippets: Configure User Snippets 2.输入vue&#xff0c;选中vue.json vs code自动生成vue.json文件 3.在 vue.json 中添加模板 {"Print to console": {"prefix": "vue2","b…

大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

SQL Zoo 5.SUM and COUNT

以下题目均来自sql zoo 1.Show the total population of the world.&#xff08;显示世界总人口&#xff09; select sum(population) from world 2.List all the continents - just once each.(列出所有的大洲——每个只列出一个) select distinct(continent) from world…

前端面试题——RN篇

文章目录 前言1.RN和React有什么区别2.RN核心组件3.scrollView和FlatList区别scrollViewList item 4.RN应用导航5.虚拟dom作用是什么目的是什么工作原理 6.RN相对于原生的ios和Android有哪些优/劣势优势劣势 7.RN生命周期8.li列表中有3条数据&#xff0c;删除第二条会发生什么9…

ES6模块化简明笔记

1、什么是模块化 详见看上一篇笔记CommonJs模块化简明笔记 2、为什么需要模块化 详见看上一篇笔记CommonJs模块化简明笔记 3、导入和导出的概念 详见看上一篇笔记CommonJs模块化简明笔记 4、模块导出&#xff08;暴露&#xff09; 4.1 导出&#xff08;暴露&#xff09;方式1&…

基于粒子群优化GRU神经网络的多输入回归分析,基于粒子群优化GRU网络多输入回归分析,基于粒子群优化GRU神经网络

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 gru的原理 粒子群算法原理 粒子群优化GRU神经网络的多输入回归分析 结果分析 展望 参考论文 背影 传统的方法回归分析容易陷入局部最优准确率低,为提高精度,本文用粒子群优化GRU神经网络的多输入回归分析 摘要 LSTM原理,…

攻防世界-web-ctf-upload

题目场景 查看源码 毫无有效的数据 官方WriteUp 本题需要利用文件上传漏洞点&#xff0c;通过绕过服务器的安全防护&#xff0c;达到getshell的目的 本题的主要考点为利用fastcgi的.user.ini特性进行任意命令执行 这里需要绕过的点如下 检查文件内容是否有php字符串 检查…

Less 教程:从入门到精通

Less 教程&#xff1a;从入门到精通 1. 引言 Less 是一种流行的动态样式表语言&#xff0c;它扩展了 CSS 的功能&#xff0c;使其更加强大和灵活。通过本教程&#xff0c;我们将深入探讨 Less 的基本概念、特性以及如何在项目中实际应用它。 2. Less 的基本概念 2.1 变量 …

vue3父组件向子组件传参的具体写法

在Vue 3中&#xff0c;父组件向子组件传参&#xff08;也称作传递props&#xff09;是一种非常基本的通信方式。下面我将详细解释如何在Vue 3中实现这一功能。 1. 定义子组件并接收props 首先&#xff0c;你需要在子组件中定义你想要接收的props。这通过在组件的props选项中完…

通过java.netHttpURLConnection类实现java发送http请求

import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public static String postForBody(String param) { try { URL url new URL(“https://usapp-open.ulifecam.com”)…

axios中的baseURL与跨域问题

axios中的baseURL 01. baseURL与跨域02. axios的baseurl为相对地址03. axios的baseURL是使用绝对路径还是相对路径04. API 请求跨域05. 生产环境代理问题我理解的baseURL 01. baseURL与跨域 三种模式配置&#xff1a; 开发环境 .env.development测试环境 .env.production生产…

游戏在抖音只有一个答案,都选C

经过2023年至2024年间多个案例的曝光&#xff0c;游戏开发商与硬核联盟之间的分歧已不再是秘密。而与此同时&#xff0c;抖音游戏发行的影响力也日益凸显&#xff0c;开始被市场所看重。 抖音能否成为取代硬核联盟的下一个渠道窗口&#xff1f; 从产品角度分析&#xff0c;抖…

Python教程:Python线程池与进程池入门

目录 1. 线程与进程的基本概念 1.1 线程 1.2 进程 1.3线程池与进程池的选择 2. Python 中的线程池与进程池 2.1 线程池 2.2 进程池 3. 实战示例 3.1 使用线程池 3.2 使用进程池 4.max_workers 详解 4.1什么是 max_workers 4.2如何设置 max_workers 4.2.1 根据任务…