顺序表知识点——顺序表的增删查改

目录

准备文件

创建顺序表蓝图

顺序表初始化函数接口

 顺序表的销毁函数接口

顺序表的打印函数接口 

顺序表的插入函数接口 

顺序表的删除函数接口 


从本节开始, 复习数据结构。 空间复杂度还有时间复杂度之后利用例题学习。 这节先学习顺序表的增删查改。 

首先, 顺序表有点类似于数组, 都是一块连续的内存空间。 如图:

这就是顺序表。 

顺序表又分固态的顺序表和动态的顺序表。 但是固态的顺序表实用性不大,在实际生活中我们很难把握数据的数量。 固态的顺序表可能导致开辟的空间过大或者过小, 所以动态的顺序表就是我们的首选。 

现在我们主要以动态的顺序表为例, 学习一下顺序表的增删查改。 

本节实现的函数接口如下:

//申请一个节点函数接口
SListNode* BuySListNode(SLTDataType x);
//链表打印函数接口
void SListPrint(SListNode* phead);
//链表尾插函数接口
void SListPushBack(SListNode** pphead, SLTDataType x);
//链表头插函数接口
void SListPushFront(SListNode** pphead, SLTDataType x);
//单链表的尾删函数接口
void SListPopBack(SListNode** pphead);
//单链表的头删函数接口
void SListPopFront(SListNode** pphead);
//单链表查找函数接口
SListNode* SListFind(SListNode* phead, SLTDataType x);
//单链表在pos位置之后插入数据函数接口
void SListInsertAfter(SListNode* pos, SLTDataType x);
//单链表在pos的位置之后删除数据函数接口
void SListEraseAfter(SListNode* pos);
//单链表在pos之前的的位置插入数据函数接口
void SLTInsert(SListNode** pphead, SListNode* pos, SLTDataType x);
//单链表在pos之前的位置删除数据函数接口
void SLTErase(SListNode** pphead, SListNode* pos); 

准备文件

先准备好三个文件

两个.c文件

一个.h文件

创建顺序表蓝图

在.h文件中创建顺序表结构体, 函数声明等。

首先包含一下头文件和要保存的数据进行typedef一下, 将要保存的数据类型typedef的意义是方便后续代码的维护, 后续使用该类型时一律使用SQDataType。

然后创建结构体

typedef int SQDataType;
typedef struct SeqList 
{
    SQDataType* data;
    int size;
    int capacity;
}SQL;

如图:

 动态的顺序表要用到动态内存分配, 用一个指针也就是data指向动态开辟的空间。因为要保存的数据类型是SQDataType 所以指针的类型是SQDataType, size是目前保存的数据的个数, capacity是顺序表的总容量。

创建完是这样的。

顺序表初始化函数接口

在.h文件中声明函数接口

.c中实现初始化函数: 

这里我初始化设置了10个数据的空间, 也可以不开辟空间,直接让ps->data = NULL, 也就是指向空。

这里我已初始化设置10个空间为例。 

 顺序表的销毁函数接口

既然有初始化开辟10个空间, 就得有销毁顺序表函数接口。 不然会出现内存泄漏。

.h声明:

.c接口实现:

释放ps->data指向的空间, 然后置为空, 顺序表的数据大小size也置位0, capacity顺序表容量同样变成0.

顺序表的打印函数接口 

在实现顺序表的插入操作前, 先实现打印, 方便后续我们检查顺序表写的是否正确。 

.h接口声明

.c接口实现:

顺序表的插入函数接口 

顺序表的插入函数接口分为:头插, 尾插, 任意位置插入。

头插就是在顺序表的第一个位置进行插入。

尾插是在顺序表所有数据接下来的位置插入。

任意位置则是在顺序表的任意一个位置插入, 这时分两种情况。

第一种情况在最后一个数据之前插入:

第二种情况是在最后一个数据之后插入。 这个时候无论这个位置多大, 都是挨着最后一个数据插入。

同时, 尾插和头插是可以通过调用任意位置插入实现。为什么这么说?

我在这里先写一下任意位置插入的函数接口声明

.h声明:

我如果调用该函数时,pos形参传的时ps->size. 那么就是尾插, 传0就是头插 

 

 所以只要我们写个任意位置插入, 尾插头插进行对他进行复用就行。 

.c函数接口实现

现在我们来检查一下我们是否写对了。这里用到了我们写的打印函数。 

ok, 没问题,继续往下走。

现在写头插和尾插就容易了。

.h函数声明

.c函数实现:

顺序表的删除函数接口 

顺序表删除函数接口, 和顺序表的插入函数接口一样, 我们如果写一个任意位置的删除函数接口, 然后复用, 就能很快的写出尾删和, 头删的函数接口。 

任意位置的删除情况如下有两种情况。 

情况1, 要删除的位置大于最后一个数据的位置, 删除的永远是最后一个位置。

情况二, 要删除的位置在数据的中间。

.h函数声明 

.c函数的实现

现在来测试一下是否有错误: 

ok, 没有错误,  其实到了这里就差不多了, 只剩下尾删和头删了。

.h声明: 

 .c文件函数接口实现

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值