【数据结构】新篇章 -- 顺序表

🌈 个人主页:白子寰
🔥 分类专栏:python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分80+),分享更多关于深度学习、C/C++,python领域的优质内  容!(希望得到您的关注~) 

 

目录

数据结构

概念

为什么需要数据结构 

使用数据结构的效果

线性表

概念

顺序表与数组的区别 

顺序表导图

动态顺序表 

typedef定义结构的两种方法

空间不够,扩容

尾部插入数据

头部插入数据

 尾部数据删除

头部数据删除

指定位置之前插入数据 

删除指定位置数据

查找顺序表中元素位置

销毁


数据结构

概念

数据结构是计算机存储组织数据的方式

为什么需要数据结构 

在这之前我们学过数组,数组是最基础的数据结构

那为什么学了数组还用学数据结构呢?

最基础的数据结构能够提供的操作已经不能完全满足复杂算法实现

使用数据结构的效果

1)能够将数据存储

     (顺序表、链表等结构)

2)方便查看存储的数据 

线性表

概念

线性表在逻辑上是线性结构,也就是说是连续的一条直线

                      但在物理结构上并不一定是连续的

线性表物理上存储时,通常以数组和链式结构的形式存储

常见的线性表:

顺序表、链表、栈、队列、字符串

顺序表与数组的区别 

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

顺序表导图

动态顺序表 

SX.h:定义顺序表的结构,顺序要实现的接口/方法

SX.c:具体实现顺序表里定义的接口/方法

test.c:测试顺序表

typedef定义结构的两种方法

//第一种方法//数据类型
typedef int datatype;//结构体
struct shunxu
{datatype* arr; //存储数据的底层结构:数组int size;      //顺序表空间大小int nowsize;   //顺序表有效数据个数
};typedef struct shunxu SX;
//第二种方法//数据类型
typedef int datatype;//结构体
typedef struct shunxu
{datatype* arr; //存储数据的底层结构:数组int size;      //顺序表空间大小int nowsize;   //顺序表有效数据个数
}SX;

以下是在SX.h中实现顺序表 

空间不够,扩容

//空间不够,扩容
void publicKUOR(SX* ps)
{//如果顺序表空间大小 = 顺序表空间有效个数if (ps->size == ps->nowsize){//三目操作符int newnowsize = ps->nowsize == 0 ? 4 : 2 * sizeof(datatype);//新建一个临时变量,因为如果realloc扩容失败,会造成技术事故datatype* tmp = (datatype*)realloc(ps->arr, newnowsize * sizeof(datatype));if (tmp == NULL){perror("realloc");exit(1);}//扩容后的数组ps->arr = tmp;//扩容后的有效空间大小ps->nowsize = newnowsize;}
}

 

尾部插入数据

 

//顺序表的尾插
void CHARUback(SX* ps, datatype x)
{//方式一:断言 -- 暴力方式 --会报错且知道具体错误位置assert(ps);//方式二:断言 -- 温柔方式--会报错,不知道具体错误位置/*if (ps == NULL){return;}*///空间不够,扩容publicKUOR(ps);//空间足够,直接插入/*第一种写法*///ps->arr[ps->size] = x;//ps->size++;/*第二种写法*/ps->arr[ps->size++] = x;}

头部插入数据

//头插
void CHARUfront(SX* ps, datatype x)
{//判断ps是否为空指针assert(ps);//空间不够,扩容publicKUOR(ps);//空间足够,数据往后挪一位int i = 0;for (i = ps->size; i > 0; i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[0] = x;ps->size++;
}

 尾部数据删除

//尾部删除
void SXdestroyback(SX* ps)
{//判断ps是否为有效指针assert(ps);//判断顺序表中有无数据assert(ps->size);//顺序表不为空ps->size--;
}

头部数据删除

//头部删除
void SXdestroyfront(SX* ps)
{//判断ps是否为有效指针assert(ps);//判断顺序表是否有数据assert(ps->size);//顺序表不为空,往前挪for (int i = 0; i < ps->size-1; i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}

指定位置之前插入数据 

//指定位置之前插入数据
//顺序表下标位置pos
void SXpointfrontestroy(SX* ps,int pos,datatype x)
{//判断ps是否为有效指针assert(ps);//断言,保证下标pos>=0且pos小于等于顺序表空间大小sizeassert(pos >= 0 && pos <= ps->size);for (int i = ps->size; i < pos; i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[pos] = x;ps->size++;
}

删除指定位置数据

//删除指定位置数据
void SXpointdestroy(SX* ps, int pos)
{//判断ps是否为有效指针assert(ps);//断言,保证下标pos>=0且pos小于顺序表空间大小sizeassert(pos >= 0 && pos < ps->size);for (int i = pos; i < ps->size - 1; i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}

查找顺序表中元素位置

//查找顺序表元素位置
int SXfind(SX* ps, datatype x)
{for (int i = 0; i < ps->size; i++){if (ps->arr[i] == x){return i;}}return -1;
}

销毁

void SXdestroy(SX* ps)
{//保证指针有效assert(ps);if (ps->arr){free(ps->arr);}ps->arr = NULL;ps->size = ps->nowsize = 0;
}

 ***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“走过这场雾,就是柏林的冬”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。

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

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

相关文章

银行监管报送系统介绍(八):银行业大额交易和可疑交易报告数据报送

依据《金融机构大额交易和可疑交易报告管理办法》&#xff1a; 第五条 金融机构应当报告下列大额交易&#xff1a; &#xff08;一&#xff09;当日单笔或者累计交易人民币5万元以上&#xff08;含5万元&#xff09;、外币等值1万美元以上&#xff08;含1万美元&#xff09;的…

AI大模型引领金融创新变革与实践【文末送书-46】

文章目录 AI大模型的定义与特点AI大模型在金融领域的应用 01 大模型在金融领域的 5 个典型应用场景02 大模型在金融领域应用所面临的风险及其防范03 AIGC 技术的科林格里奇困境04 金融机构使用 AIGC 技术的 4 条可能路径AIGC重塑金融&#xff1a;AI大模型驱动的金融变革与实践…

短剧小程序开发微视频短剧系统搭建

开发短剧小程序微视频短剧系统需要以下几个步骤&#xff1a; 1. **需求分析**&#xff1a;确定小程序的主要功能&#xff0c;包括但不限于观看视频、点赞、评论、分享、收藏等功能。同时要考虑系统的兼容性和可扩展性&#xff0c;确保将来可能的更新和维护。 2. **选择合适的后…

农学院智慧农业产教融合基地解决方案

第一章 背 景 1.1国际数字农业发展概况 随着全球信息化、智能化技术的快速发展&#xff0c;数字农业作为现代农业发展的重要方向&#xff0c;正日益受到国际社会的广泛关注。数字农业依托物联网、大数据、云计算、人工智能等现代信息技术&#xff0c;实现农业生产全过程的智能…

上采样技术在语义分割中的应用

目录 概要 一、概述 二、实现方法 1.转置卷积 2.反池化 3.双线性插值法 三、在经典网络中的的应用 1.U-Net 2.FCN 总结 概要 上采样是用于深度学习中提高语义分割精度的技术&#xff0c;可以实现图像放大和像素级别标注 一、概述 神经网络的基本结构为&#xff1a;…

解决MySQL登陆报错:Unable to load authentication plugin ‘caching_sha2_password‘.

前言&#xff1a;本文内容为实操记录&#xff0c;仅供参考&#xff01; 问题&#xff1a;使用工具登录mysql时若报错&#xff1a;Unable to load authentication plugin caching_sha2_password. 分析&#xff1a;无法识别密码引擎&#xff0c;这时需要去查看所需登陆用户的密码…

解决MySQL日期字段类型不匹配导致的时间区间查询异常

前言 在今天的开发过程中&#xff0c;我碰到了一个关于时间查询的bug。在使用MyBatis Plus的Lambda表达式进行时间区间查询时&#xff0c;发现某些满足条件的数据无法被正确检索出来。经过一番分析&#xff0c;发现问题根源在于查询条件与数据库实际存储的时间格式不匹配。 问…

我是如何在学术界占有一席之地的——专注于我的写作

罗伯特纽贝克 “作为一个移民&#xff0c;你是怎么发表这么多文章的&#xff1f;”意识到我不是以英语为母语的人&#xff0c;当我去年面试教职时&#xff0c;人们无数次问过这个问题。我知道披露我的挣扎不太可能让我找到工作&#xff0c;所以我会笑着说&#xff1a;“我喜欢…

设计模式88

一、创建型模式&#xff08;5种&#xff09; 1、工厂方法模式 同一类产品的生产 2、抽象工厂模式 将同一个具体工厂所生产的位于不同等级的一组产品称为产品族&#xff0c;例如&#xff08;衣服鞋子帽子&#xff09; 同一级别 3、单例模式 4、建造者模式 建造者和指挥者…

Python实现VMware自动化资源巡检

推送效果&#xff1a; E:\PYPJ1\Scripts\python.exe C:\Users\PycharmProjects\pythonProject\main.py 自动化巡检-执行时间&#xff1a;2024-03-25 14:47:04 Connected to vCenter Found datacenter: CN-SH-Datacenter----------存储资源指标---------- 资源总容量&#xff…

实验报告-04

实验名称&#xff1a;实验四 递推问题&#xff08;一&#xff09; 实验目的&#xff1a;熟练掌握一些递推问题的处理方法&#xff1a;仔细分析&#xff0c;不断尝试推理&#xff0c;充分利用数学知识&#xff0c;找出问题中的内在规律&#xff0c;抽象出递推的数学模型。 实验…

【c 语言 】malloc函数详解

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

安卓手机APP开发者的第一件事:安装安卓工作台

安卓手机APP开发者的第一件事:安装安卓工作台 安装安卓工作台仅需要一些点击。首先检查软件对系统需求。 然后下载最新版本的安卓工作台。 在windows系统下的安装 需求项 最低配置 推荐配置 操作系统 64位的windows8 最新版本的64位的windows 内存 8GB …

LeetCode 热题 100 题解(一):哈希部分

《LeetCode热题 100》 经过了两个多月&#xff0c;终于刷完了代码随想录的题目&#xff0c;现在准备开始挑战热题一百了&#xff0c;接下来我会将自己的题解以博客的形式同步发到力扣和 c 站&#xff0c;希望在接下来的征程中与大家共勉&#xff01; 题组一&#xff1a;哈希 题…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路&#xff1a;因为本题是二叉搜索树&#xff0c;利用它的特性可以从上往下进行递归遍历树&#xff0c;这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

Git实现提交代码自动更新package.json版本号

此文章主要讲诉如何通过git提交代码来自动更新我们的版本号&#xff0c;也可以指定固定分支才能更新 只要涉及到package version的项目都可以&#xff0c;例如&#xff1a;Vue、React、Node等等 前提是当前项目已经关联了Git仓库 一、编写我们的Node更新版本逻辑&#xff0c;名…

Debezium日常分享系列之:Debezium 2.6.0.CR1发布

Debezium日常分享系列之&#xff1a;Debezium 2.6.0.CR1发布 一、重大改变1.MySQL2.SQL Server3.Vitess 二、新功能和改进1.OpenLogReplicator 的 XML 支持2.Debezium 服务器的 TRACE 级别日志记录3.新的统一快照模式4.Cassandra 可配置分区模式 Debezium 2.6.0.CR1版本包含许多…

QSplashScreen

以前打红警的时候进入游戏界面会有一个启动界面&#xff0c;比如美国是有伞兵&#xff0c;英国有狙击手&#xff0c;韩国有黑鹰战机的一些介绍&#xff0c;这些就是启动界面&#xff0c;就是由QSplashScreen这个类来实现的。 QSplashScreen 是 Qt 框架中的一个类&#xff0c;用…

jsp用户登录界面

主界面 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><meta charset"UTF-8"><title>登录界面</title> </head> <body bgcolor"#faebd7"> <form…

HarmonyOS实战开发-UIAbility和自定义组件生命周期

介绍 本文档主要描述了应用运行过程中UIAbility和自定义组件的生命周期。对于UIAbility&#xff0c;描述了Create、Foreground、Background、Destroy四种生命周期。对于页面和自定义组件描述了aboutToAppear、onPageShow、onPageHide、onBackPress、aboutToDisappear五种生命周…