当前位置: 首页 > news >正文

【数据结构初阶】--顺序表(一)

😘个人主页:@Cx330❀

👀个人简介:一个正在努力奋斗逆天改命的二本觉悟生

📖个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》

前言: 在上篇博客的学习中,我们学习了算法复杂度,学会了计算时间复杂度和空间复杂度,根据二者来评估一个算法的优良,有了上篇学习的基础,这篇博客会给大家分享关于顺序表的相关认识,关于顺序表的使用和深度解析将会在下一篇博客中分享给大家,希望大家坚持到底🌹


目录

一、认识顺序表

1.1线性表

1.2顺序表的概念与结构

二、顺序表分类 

2.1静态顺序表

2.2动态顺序表 

三、动态顺序表的实现

3.1初始化


一、认识顺序表

在认识顺序表之前,我先给大家引入线性表这个概念,有帮助大家更好的认识顺序表

1.1线性表

概念:线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串.....

线性表在逻辑上是线性结构,也就是说是连续的一条直线,但是在物理结构上不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储

1.2顺序表的概念与结构

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

结构:

  • 逻辑结构:线性
  • 物理结构:线性

顺序表与数组的区别: 顺序表的底层结构是数组,对数组的封装,实现了常用的增删查改等结构

 这里大家可能还是不太懂,我给大家举个例子对比顺序表和数组(苍蝇馆子与米其林五星):

 


二、顺序表分类 

2.1静态顺序表

概念:使用定长数组存储数据 

缺陷:空间给少了不够用,空间给大了会造成空间浪费

静态顺序表: 

typedef int SLDataType;
#define N 6
typedef struct Seqlist {
    SLDataType a[N];//定长数组
    int size;//有效数据个数
}SL;

 

2.2动态顺序表 

概念: 使用动态开辟的数组进行存储

动态顺序表:

typedef struct Seqlist 

{
    SLDataType* arr;
    int size;//有效数据个数

    int capacity;//空间容量
}SL;

 


三、动态顺序表的实现

3.1初始化

我们可以分为三个文件来对动态顺序表进行实现,这样三个文件相互分工合作就可以完成对顺序表进行实现了

 

seqlist.h 

#pragma once
#include<stdio.h>
#include<stdlib.h>//定义顺序表的结构
typedef int SLTDataType;
typedef struct Seqlist
{SLTDataType* arr;//存储数据int size;//有效数据个数int capacity;//空间容量
}SL;//顺序表初始化
void SLInit(SL* ps);

注: 

这里对int类型数据和结构体都进行了重命名,对int重命名可以帮助我们以后的修改操作,如果我们想用字符串,这里就直接把int改为char就可以了,结构体重命名可以使后续使用起来更加方便,看起来也会更加清晰。

seqlist.c 

#define _CRT_SECURE_NO_WARNINGS
#include"seqlist.h"void SLInit(SL* ps)
{ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}

注:我们在写seqlist.c文件时要包含seqlist.h的头文件 

test.c 

#define _CRT_SECURE_NO_WARNINGS#include"seqlist.h"void test1()
{SL s1;SLInit(&s1);
}int main()
{test1();return 0;
}

注:

 

我们这里传参数,一定要采用传址调用的形式,否则会出现一些错误(在这里会报未初始化的局部变量sl这个错误),因为传值调用修改形参并不影响实参,它们的地址终究还是不同的,而传址调用,形参的修改会影响实参,这里如果大家对指针这块知识不是特别清楚的话,可以看一下下面这个博客,也是主播写的指针详解,对指针清晰的同学也可以回顾一下指针的知识:【C语言】指针超详解版(入门必看!)

我们编写代码最好勤测试,避免写出大量代码后再测试而导致出现问题,无法定位问题。大家可以想想,如果不经常性进行测试的话,等到后续程序写完后发现有问题,很难入手去解决,就算找到了错误,修改起来的工作量也还是蛮大的哈。而我们写一个板块进测试一下的话,可以及时找出问题并进行修正,所有测试这个习惯是一定需要具备的。

 预告:到这里顺序表的初始化工作我们就已经做完了,由于初始化比较简单,但是大家下来还是要自己画图敲代码理解一下,相信在主播的劝告下,很多同学都开始慢慢尝试画图来理解了,那么下一篇博客,将会给大家分享尾插、头插、尾删、头删等接口的代码实现,同样我也会拆开一点一点的给大家讲注意事项以及易错点


这篇文章用到了之前C语言和数据结构的相关知识,大家可以去回顾一下,这里我把链接挂上去了,大家就不用查找了🌹

【数据结构初阶】--算法复杂度详解 

【C语言】指针超详解版(入门必看!)

【C语言】动态内存管理(详解版)

 总结:本篇博客带着大家初步认识了顺序表,并完成了简单的初始化操作,这是数据结构初阶的第二篇博客,希望大家可以坚持到底,后续我还会继续分享顺序表、链表、二叉树、堆、栈、队列等相关数据结构的博客,大家感兴趣的话可以先看一下往期回顾中的几篇文章,都是对于数据结构来说比较重要的一些C语言知识储备,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。 🌹🌹🌹

 

http://www.dtcms.com/a/314844.html

相关文章:

  • BD202402跑步 线性求逆元 素数筛 数学
  • 数分思维13:AB测试
  • 开源网页生态掘金:从Bootstrap二次开发到行业专属组件库的技术变现
  • 复杂场景识别率↑31%!陌讯多模态融合算法在智慧环卫的实战解析
  • 上一篇文章的补充理解
  • 深度学习零基础入门(4)-卷积神经网络架构
  • sqli-libs通关教程(21-30)
  • 文件上传
  • c++ std::vector std::find_if 自定义结构体 查找
  • 算力网络架构演进的思考
  • Linux 系统启动原理
  • TorchDynamo源码解析:从字节码拦截到性能优化的设计与实践
  • 服务器数据安全:利用阿里云OSS/腾讯云COS实现网站数据自动备份
  • 操作系统中线程的三种实现方式
  • 牛客网之华为机试题:HJ26 字符串排序
  • Webpack 搭建 Vue3 脚手架详细步骤
  • 自动驾驶中的传感器技术22——Camera(13)
  • Java直接内存的介绍和实现
  • FastAPI后端工程化项目记录
  • STM32_Hal库学习SPI
  • MSPM0开发学习笔记:二维云台结合openmv实现小球追踪
  • 反阶持仓筹码副图指标,三红做多持股技术及指标案例
  • 图的存储方式-无向图-邻接多重表
  • 7.1、《软件工程》-软件生命周期-CMM-开发模型
  • 一文速通:命名实体识别(NER)训练方案与标注方法全解析
  • 我用一个 Postgres 实现一整套后端架构!
  • 【SpringAI】SpringAI的介绍与简单使用
  • Vue3核心语法进阶(生命周期)
  • 【笔记】ROS1|2 Turtlebot3汉堡Burger连接和远程控制【旧文转载】
  • P1002 [NOIP 2002 普及组] 过河卒