数据结构:线性表守门员之顺序表

数据结构:线性表守门员之顺序表前言之前的两篇文章我们一起讨论了时间复杂度和空间复杂 从这篇文章开始我们将一起讨论数据结构的常用内容 例如线性表 树 内容 今天我们先来看看线性表 线性表首先我们会有一个疑问 什么是线性表 我们可以把线性表理解成一条连续的直线 这条直线上具

大家好,欢迎来到IT知识分享网。

前言

之前的两篇文章我们一起讨论了时间复杂度和空间复杂,从这篇文章开始我们将一起讨论数据结构的常用内容,例如线性表、树、内容,今天我们先来看看线性表。

线性表

首先我们会有一个疑问?什么是线性表,我们可以把线性表理解成一条连续的直线,这条直线上具有N个相同特性的数据元素。常见的线性表有:顺序表,链表,栈。队列等等。

顺序表

那什么是顺序表那?

标准的概念是:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构。

大家看这个描述,一排大腿这不就是数组嘛!没错,其实就是数组,之前看过一个很有意思的描述,分享给大家。

数据结构:线性表守门员之顺序表

静态顺序表

顺序表分为静态顺序表和动态顺序表,静态顺序表就是创建一个长度大小固定的数组,这种方式有个问题适用于知道数据大小的场景,弊端那就是缓存开大了空间浪费,开小了不够用。

typedef int SLDataType; //静态开辟 #define DATA_MAX_LEN 5 typedef struct SeqList { SLDataType data[DATA_MAX_LEN]; //指向动态开辟的数组 int datalen; //数据个数 }SL; 

动态顺序表

动态顺序表通过指针的方式实现,在注册顺序表时对空间大小进行分配,使用完成后可以注销

typedef int SLDataType; //定义动态顺序表结构体 #define INIT_CAPACITY 4 typedef struct SeqList { SLDataType* data; //指向动态开辟的数组 int size; //数据个数 int capacity; //空间容量 }SL;

初始化动态顺序表:

void SeqInit(SL* ps) { assert(ps); ps->data = (SLDataType*)malloc(sizeof(SLDataType) * INIT_CAPACITY); if (ps->data == NULL) { perror("malloc fail"); return; } ps->size = 0; ps->capacity = INIT_CAPACITY; }

这样我们就根据需求进行开辟空间大小,修改空间大小的时候,只需要修改 宏定义INIT_CAPACITY的 大小即可。

初始化完成后,很多教程会让写好几个函数,例如:头插,尾插,头删,尾删,等等,其实不需要那么麻烦,我们就可以编写 两个函数:

函数1:在某个位置进行插入N个数据

函数2:在某个位置进行删除N个数据。

这两个就能满足所有需求,如果大家有兴趣,可以自己写写看。

到这里,顺序表我们就完成了,如果大家喜欢麻烦点个关注!!!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/172110.html

(0)
上一篇 2025-03-01 08:45
下一篇 2025-03-01 09:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信