顺序表及动态顺序表的实现(c语言)

目录

1. 数据结构

2. 线性表

3. 顺序表的分类

3.1静态顺序表

3.2 动态顺序表

3.3 总结

4. 动态顺序表的实现

4.1SeqList.h

4.2 SeqList.c


1. 数据结构

要说顺序表就离不开数据结构

什么是数据?常⻅的数值1、2、3、4.....、教务系统⾥保存的⽤⼾信息(姓名、性别、年龄、学历等
等)、⽹⻚⾥⾁眼可以看到的信息(⽂字、图⽚、视频等等),这些都是数据
什么是结构?
当我们想要使⽤⼤量使⽤同⼀类型的数据时,通过⼿动定义⼤量的独⽴的变量对于程序来说,可读性
⾮常差,我们可以借助数组这样的数据结构将⼤量的数据组织在⼀起,结构也可以理解为组织数据的
⽅式。
想要找到草原上名叫“咩咩”的⽺很难,但是从⽺圈⾥找到1号⽺就很简单,⽺圈这样的结构有效将
⽺群组织起来。
概念:数据结构是计算机存储、组织数据的⽅式。数据结构是指相互之间存在⼀种或多种特定关系
的数据元素的集合。数据结构反映数据的内部构成,即数据由那部分构成,以什么⽅式构成,以及数 据元素之间呈现的结构。
总结:
1)能够存储数据(如顺序表、链表等结构)
2)存储的数据能够⽅便查找

2. 线性表

首先我们这里要知道一个概念:顺序表是线性表的一种。

线性表( linear list )是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使
⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的,
线性表在物理上存储时,通常以数组和链式结构的形式存储。
案例:蔬菜分为绿叶类、⽠类、菌菇类。线性表指的是具有部分相同特性的⼀类数据结构的集合

3. 顺序表的分类

顺序表在物理结构上是连续的,逻辑上是线性的。因此顺序表属于线性表。

顺序表又分为静态顺序表和动态顺序表。

3.1静态顺序表

3.2 动态顺序表

3.3 总结

顺序表就是一个数组而已,只不过我们可以对这个数组进行增删查改的功能。

4. 动态顺序表的实现

首先我们需要建立三个文件分别是test.c,SeqList.c,SeqList.h;第一个文件我们用来测试第二个文件我们用来实现顺序表的功能,第三个文件用来声明实现顺序表的函数。

4.1SeqList.h

4.2 SeqList.c

这个就很简单就不多说了~

这里我们初始化的时候令数组为空同时有效数据以及容量都是0.

在我们进行销毁时说明arr数组已经申请了空间只有它不为空时我们进行free

这个方法就是当我们数组的容量与数组的有效数据个数相同时说明容量不够我们就需要用realloc函数进行扩容这里我们之所以定义了newcapacity变量是因为我们在初始化时令capacity为0了。

尾插之前我们需要检查空间容量是否足够让后就可以在下标为size的位置直接插入同时ps->size++;

头部插入我们画图分析一下有两种方法可以实现

第一种就是我们的for循环

第二种方法法直接调用memmove函数起始位置就是数组首元素的地址目标位置就是起始位置的地址加一让后挪动size个元素的字节大小。

该函数的实现与头插类似这里我们就不加赘述了啊~

尾部删除直接就size--就可以了

这个我们还是画图分析

这里我们在删除指定位置的数据时应该要保证里面有效数据存在删除就是把pos位置的元素被覆盖如下图所示:

最后我们把size--就行了

这个就比较简单就不分析了~

到此为止,我们已经完成了动态顺序表的增添删改功能~~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值