目录
🛰️博客主页:✈️銮同学的干货分享基地
🛰️欢迎关注:👍点赞🙌收藏✍️留言
🛰️系列专栏:🎈 数据结构
🎈 C语言学习
🛰️代码仓库:🎉数据结构仓库
家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真重要,各位路过的友友麻烦多多点赞关注,欢迎你们的私信提问,感谢你们的转发!
关注我,关注我,关注我,你们将会看到更多的优质内容!!
🏡🏡 本文重点 🏡🏡:
🚅 线性表概述 🚃 顺序表 🚏🚏
🛫前言🛫:
在上节课中我们已经对数据结构有了一定的了解,我们说到数据结构是计算机存储、组织数据的方式,我们通过精心选择更恰当数据结构可以带来更高的运行或存储效率。至此我们就知道了数据结构的重要性,所以今天我们将要了解和学习一种实用的数据结构——线性表。
🚀一、线性表概述🚀:
线性表(linear list)是数据结构的一种,一个线性表是 n 个具有相同特性的数据元素的有限序列,是最基本、最简单也最常用的一种数据结构。
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表,但存储层次上属于链式存储,是把最后一个数据元素的尾指针指向了首位结点)。
线性表是一种在实际中广泛使用的数据结构,线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。常见的线性表:顺序表、链表、栈、队列、字符串等等。
🛰️二、顺序表🛰️:
对线性表有了总体上的了解之后,我们今天的主要学习内容就是线性表中的顺序表。
1.概念及结构:
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,并在数组上完成数据的增、删、查、改。其本质就是数组,但与数组不同的是,顺序表在其数组本质的基础上,还要求数据连续存储,不能跳跃或间隔存储。
顺序表一般可以分为两类:
- 静态顺序表:使用定长数组存储元素。
- 静态顺序表存在很明显的缺陷,即大小固定,数据少了造成空间浪费,数据多了申请的空间又可能不够用。
- size 表示当前顺序表中已经存放的有效数据个数。
#define N 10 typedef int SLDataType; //自定义类型SLDataType,将类型重命名,后续要存储其它类型时方便更改 typedef struct SeqList { SLDataType array[N]; //定长数组 size_t size; //有效数据个数 }SeqList;
- 动态顺序表:使用动态开辟的数组存储元素。
- 动态顺序表克服了静态顺序表的弊端,使空间申请变得灵活,我们可以随时根据需求申请合适大小的空间。
- size 表示当前顺序表中已经存放的有效数据个数。
- capacity 表示当前顺序表中可容纳数据个数的上限。
typedef int SLDataType; //自定义类型SLDataType,将类型重命名,后续要存储其它类型时方便更改 typedef struct SeqList { SLDataType* a; //指向动态开辟的数组 size_t size; //有效数据个数 size_t capacity; //容量大小 }SeqList;
2.接口实现:
我们在这里研究接口实现时,直接使用工程来进行说明。同时为了展示更多的接口实现,我将直接使用动态顺序表来为各位小伙伴们进行讲解。
①.工程文件:
跟之前我们写过的通讯录与几个简易小游戏一样,我们同样使用模块化开发格式,使用