1.浅谈数据结构
相信我们对数据结构都不陌生,我们之前学过的数组就是最基础的数据结构,它大概就长这样:
而作为最简单的数据结构,数组只能帮助我们实现储存数据这一个功能,随着学习的深入,和问题的日渐复杂,最基础的已经不能完全满足我们复杂的算法实现,于是我们需要学习更进阶的数据结构来实现我们对数据的增删查改等一系列操作。
我们回顾一下数据结构的定义:它是计算机中存储、组织和管理数据的方式。它定义了数据的表示方式、操作和存储方式,以及数据之间的关系。
说人话就是:1.能够存储数据(如顺序表,链表等)
2.存储的数据可以方便的查找出来
顺序表就是这样一种数据结构,比数组更复杂,可以更好满足我们的需求。但事实上顺序表的底层还是数组,它是对数组的封装,实现了常用的增删查找的接口。
2.顺序表
2.1顺序表的定义
顺序表(Sequential List)是线性表的一种,它是将数据元素按照一定的顺序依次存放在一段连续的存储单元中,物理结构不一定是线性的,但逻辑结构一定是线性的。
补充一点芝士:
线性表(linear list )是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
2.2顺序表的分类
1)静态顺序表
概念:使用定长数组储存元素
静态顺序表缺陷:给小了,空间不够用;给大了,空间浪费。
于是就有了下面的动态表。
2)动态顺序表
2.3动态顺序表的实现
//动态顺序表
typedef struct SeqList
{
SLDataType* arr;
int size; //有效数据个数
int capacity; //空间大小
}SL;
//typedef struct SeqList SL;
//顺序表初始化
void SLInit(SL* ps);
//顺序表的销毁
void SLDestroy(SL* ps);
void SLPrint(SL s);
//头部插入删除 / 尾部插入删除
void SLPushBack(SL* ps, SLDataType x);
void SLPushFront(SL* ps, SLDataType x);
void SLPopBack(SL* ps);
void SLPopFront(SL* ps);
//指定位置之前插入/删除/查找数据
void SLInsert(SL* ps, int pos, SLDataType x);
void SLErase(SL* ps, int pos);
int SLFind(SL* ps, SLDataType x);
后面会详细讲这些实现是如何操作的~~~
🎈🎈完结撒花🎈🎈