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

数据结构之手撕顺序表(讲解➕源代码)

0.引言

在本章之后,就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握,如果有小伙伴对上面相关的知识还不是很清晰,要先弄明白再过来接着学习哦!

那进入正题,在讲解顺序表之前,我们先来介绍线性表这个数据结构。

0.1 线性表

线性表是 n个具有相同特性的数据元素组成的有限的序列。

相同特性:同一种数据类型
有限:数据元素的个数是有限的

常见的线性表:顺序表、链表、栈、队列、字符串等。

0.2 线性表的逻辑结构和物理结构

0.2.1 逻辑结构

线性表的逻辑结构是线性结构,线性结构 是一条连续的直线,也就是说 线性表在逻辑上是连续的,比如我们在C语言学过的的数组(顺序表),指针(可以构成链表)。

上图分别为顺序表跟链表,他们在逻辑结构上都是一个接着一个,连续的。然而在物理结构他们还依旧连续吗?

0.2.2 线性表的物理结构

线性表在物理结构上不一定连续,我们可以构成线性表的结构有数组和指针,指针又被称作链式结构。

当线性表是由数组构成时
        它在逻辑结构是连续的,物理结构也一定连续,因为数组是一个一个挨着的空间,在地址上是紧挨着的,所以是连续的。

如图:

当线性表为链式结构时

        链式结构在逻辑上一定是连续的,因为我们可以通过指针就找到该指针对应的地址
        但指针的地址不一定是连续的,我们可以这存一个,那存一个,通过指针给他们链接起来。

如图:

当了解了线性表之后,就让我们一起学习第一种数据结构——顺序表吧!

1. 顺序表

1.1概念

顺序表是 用一段物理地址连续的存储单元依次存储数据元素的线性结构,通常采用数组的形式存储。在数组上完成数据的增删查改。

1.2 顺序表的分类

1.2.1 静态顺序表

静态顺序表指的是利用定长数组来存储元素

//顺序表的静态存储
#define N 7 //顺序表一次开辟的空间个数
typedef int SLDataType; //将数据类型重命名,以便我们未来换用其他的数据类型
typedef struct SeqList
{SLDataType arr[N]; //定长数组size_t size; //有效的数据个数,size_t指的是无符号整型
}Seqlist;

我们在使用静态顺序表的时候,只能每次开辟N个大小的空间,这也就要求我们在使用之前就要想好你要存放多少个数据,非常不灵活,所以我们大多时候不使用静态顺序表,而是改用动态顺序表作为我们日常应用。

1.2.2 动态顺序表

动态顺序表:使用动态开辟的数组存储。

1. 动态顺序表的定义
typedef int SLDataType; //数据类型的重命名,方便更改数据类型
typedef struct SeqList
{SLDataType *a; //指向动态开辟的数组int size;     //有效的数据个数int capacity; //动态开辟的数组的容量
}SL;
2.初始化
void SLInit(SL*ps) //初始化
{ps->a = (SLDataType*)malloc(sizeof(SLDataType)*4);if(ps->a == NULL){perror("malloc");exit(EXIT_FAILURE);}ps ->size = 0;ps ->capacity = 4;
}
3.退出程序时的销毁
void SLDestroy(SL*ps) //退出时销毁
{free(ps->a);ps->a = NULL;ps->size = 0;ps->capacity = 0;
}
4.尾插尾删
尾插
void SLPushBack(SL*ps,int i) 
{SLCheckCapacity(ps);ps->a[ps->size] = i;ps->size++;
}尾删
void SLPopBack(SL*ps) 
{assert(ps->size > 0);ps->size--;
}
5.头插头删
头插
void SLPushFront(SL*ps,int i)
{SLCheckCapacity(ps);int end = ps->size;for(;end - 1 >= 0 ; end--){ps->a[end] = ps->a[end - 1];}ps->a[0] = i;ps->size++;
}///头删
void SLPopFront(SL*ps)
{assert(ps->size > 0);int i = 0;for(i = 0 ; i + 1 < ps->size ; i++){ps->a[i] = ps->a[i+1];}ps->size--;
}
6.扩容
void SLCheckCapacity(SL*ps)  //扩容函数
{if(ps->size == ps->capacity){SLDataType *tmp = (SLDataType*)realloc(ps->a,((sizeof(SLDataType)) * ((ps->capacity) * 2)));if(tmp == NULL){perror("realloc");exit(EXIT_FAILURE);}ps -> a = tmp;ps->capacity *= 2;}
}
7.打印
void SLPrint(SL*ps) //打印
{int i = 0;for(i = 0 ; i < ps->size ;i++){printf("%d ",ps->a[i]);}printf("\n");
}

以上就是顺序表的相关接口实现。

相关文章:

数据结构之手撕顺序表(讲解➕源代码)

0.引言 在本章之后&#xff0c;就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握&#xff0c;如果有小伙伴对上面相关的知识还不是很清晰&#xff0c;要先弄明白再过来接着学习哦&#xff01; 那进入正题&#xff0c;在讲解顺序表之前&#xff0c;我们先来介绍…...

小微企业是怎样从客户管理系统中获益的?

大企业普遍拥有成熟的客户管理系统&#xff0c;而对小微企业而言&#xff0c;客户管理系统的重要性更为突出。这是因为小微企业管理相对薄弱&#xff0c;资源有限&#xff0c;人力资金需要更加精细化的管理。那么&#xff0c;小微企业如何从客户管理系统中获益&#xff1f; 一…...

mysql整库备份表结构和数据

命令 mysqldump -P 端口 -h 主机 -u 用户名 -p 数据库 > xxxxbak.sql 将导出数据库的表结构及数据&#xff08;建表语句和insert语句&#xff09; 举例 mysqldump -P 3306 -h 100.120.56.23 -u my_username-p sys > system-230510.sql...

LinkedHashMap与LRU缓存

序、慢慢来才是最快的方法。 背景 LinkedHashMap 是继承于 HashMap 实现的哈希链表&#xff0c;它同时具备双向链表和散列表的特点。事实上&#xff0c;LinkedHashMap 继承了 HashMap 的主要功能&#xff0c;并通过 HashMap 预留的 Hook 点维护双向链表的逻辑。 1.缓存淘汰算法…...

2023大联盟6比赛总结

比赛链接 反思 A 为什么打表就我看不出规律&#xff01;&#xff01;&#xff01; 定式思维太严重了T_T B 纯智障分块题&#xff0c;不知道为什么 B 100 B100 B100 比理论最优 B 300 B300 B300 更优&#xff08;快了 3 倍&#xff09;&#xff0c;看来分块还是要学习一…...

05_51单片机led流水线的实现

1:step创建一个新的项目并将程序烧录进入51单片机 以下是51单片机流水线代码的具体实现 #include <REGX52.H>void Delay500ms() //11.0592MHz {unsigned char i, j, k;i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); }void main(){while(1){P1 0…...

Java系列 | 如何讲自己的JAR包上传至阿里云maven私有仓库【云效制品仓库】

什么是云效 云效是云原生时代一站式 BizDevOps 平台&#xff0c;产研数字化同行者&#xff0c;支持公共云、专有云和混合云多种部署形态&#xff0c;通过云原生新技术和研发新模式&#xff0c;助力创新创业和数字化转型企业快速实现产研数字化&#xff0c;打造“双敏”组织&…...

小程序技术加速信创操作系统国产化替换

随着信息技术的不断发展&#xff0c;信息技术应用创新&#xff08;简称“信创”&#xff09;已经成为了当今企业数字化转型的重要趋势之一。信创是指在信息技术领域&#xff0c;以自主可控的国产软硬件产品和服务为核心&#xff0c;构建起一套完整的信息技术生态体系&#xff0…...

免费:实时 AI 编程助手 Amazon CodeWhisperer

点 &#xff0c;一起程序员弯道超车之路 现已正式推出实时 AI 编程助手 Amazon CodeWhisperer&#xff0c;包括 CodeWhisperer 个人套餐&#xff0c;所有开发人员均可免费使用。最初于去年推出的预览版 CodeWhisperer 让开发人员能够保持专注、高效&#xff0c;帮助他们快速、安…...

面试准备-深入理解计算机系统-信息的表示与处理1

浮点运算是不可结合的&#xff08;由于表示的精度有限&#xff09;。比如(3.141e20)-1e20是0.0而3.14(1e20-1e20)是3.14。整数虽然只能编码一个较小的取值范围&#xff0c;但是是准确的&#xff1b;浮点数虽然能编码更大的范围&#xff0c;但是是近似的。 二进制转十六进制转换…...

搭建Atlas2.2.0 集成CDH6.3.2 生产环境+kerberos

首先确保环境的干净&#xff0c;如果之前有安装过清理掉相关残留 确保安装atlas的服务器有足够的内存&#xff08;至少16G&#xff09;&#xff0c;有必要的hadoop角色 HDFS客户端 — 检索和更新Hadoop使用的用户组信息&#xff08;UGI&#xff09;中帐户成员资格的信息。对调…...

【运维笔记】swow源码编译安装

swow的github网址 https://github.com/swow/swow 从github中拉取源码 git pull https://github.com/swow/swow.git 编译安装 github中readme文件讲述了安装方法 这里整理了命令&#xff0c;进入拉取项目的目录后依次执行命令即可 #pwd 确保自己在swow目录中&#xff0c;如…...

【2023/10/16 下午10:32:39】

2023/10/16 下午10:32:39 BOOL Create(LPCTSTR strTitle, DWORD dwStyle, const RECT &rect, CWnd *pwndParent, DWORD dwPaletteSetStyle = PSS_PROPERTIES_MENU | PSS_AUTO_ROLLUP | PSS_CLOSE_BUTTON | PSS_SNAP); 2023/10/16 下午10:32:46 这是一个函数声明,看起来…...

qemu基础篇——VSCode 配置 GDB 调试

文章目录 VSCode 配置 GDB 调试安装 VSCode 插件调试文件创建调试配置配置脚本qemu 启动脚 启动调试报错情况一报错情况二报错情况三 调试界面运行 GDB 命令查看反汇编断点查看内核寄存器查看变量参考链接 VSCode 配置 GDB 调试 qemu-基础篇——arm 裸机调试环境搭建 上一节中…...

Spark常用算子

转换算子 value类型 算子名称作用Map映射a->bflatMap扁平化[[a,b],[c,d]] -> [a,b,c,d] &#xff0c;二维变一维groupBy分组[1,2,3,4] ->[[1,3],[2,4] ]&#xff0c;一维变二维filter过滤[1,2,3,4] -> [2,4] 符合条件进入&#xff0c;不符合去掉distinct去重[1,1…...

day35

今日内容概要 Socket抽象层(socket编程) 基于TCP协议的借助socket可以编程客户端和服务端的程序 链接循环 通信循环 基于UDP协议的套接字(socket)编程 粘包现象 如何解决粘包现象(重要的是解决的思路) struct模块的使用(打包、解包) 今日内容详细 Socket抽象层&#x…...

js原型链以及实现继承的手段

1.原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。 简单回顾一下构造函数、原型和实例的关系&#xff1a;每个构造函数都有一个原型对象&#xff0c;原型对象都包含一个指向构造函数的指针&#xff0c;而实例都包含一个指向原型对象的内部指针。…...

jdk8u201版本cpu.load过高问题的排查和解决

文章目录 1、背景2、现象3、排查定位4、原因总结5、解决 1、背景 jdk8u45版本存在安全漏洞&#xff0c;性能问题。需要升级到8u201 2、现象 升级到201版本后&#xff0c;出现cpu.load过高 3、排查定位 使用压测工具压测时&#xff0c;cpu.load过高问题必现&#xff0c;确认…...

【计算机网络笔记】数据交换之报文交换和分组交换

系列文章目录报文交换分组交换存储-转发报文交换 vs 分组交换总结 系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 报文交换 报文&#xff1a;源&#xff08;应用&#xff09;发送的信息整体。比如一个文件、一…...

【广州华锐互动】利用VR开展细胞基础实验教学有什么好处?

在科技发展的驱动下&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已被广泛应用于各个领域&#xff0c;包括教育和医学。尤其是在医学教育中&#xff0c;VR技术已成为一种革新传统教学模式的有效工具。本文将探讨使用VR进行细胞基础实验教学的优势。 首先&#xff0c;VR技…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...