数据结构初阶之顺序表

导语:

数据结构 计算机存储 组织数据 的方式,是指相互之间存在⼀种或多种特定关系的数据元素的集合,也反映数据的内部构成,即数据由哪部分构成,以什么方式构成,以及数据元素之间呈现的结构。

数据结构初阶的学习包括顺序表,链表,它们都可以用来实现储存数据,修改数据,查找数据,删除数据的操作。

今天我们学习的是顺序表,请看目录:

一、顺序表的介绍

顺序表是一种最简单的数据结构,在学习完它之后,我们可以用它来实现对数据的增删查改,可以对数据进行更好的管理,由于顺序表底层逻辑用的是数组,所以它的物理结构逻辑结构都是连续的。

二、顺序表的分类

1、静态顺序表

先来看下静态顺序表的结构:

静态顺序表使用起来很简单,直接把类型相同数据放到结构体底下的数组中即可,不要忘了存储一个数据之后都让 size++,这样可以有效的告诉我们顺序表存储了多少个数据。但是静态有一个缺陷就是空间(capacity)是固定的,不能无限的存储数据。所以在实际操作中我们很少使用静态顺序表,因此接下来我们介绍动态顺序表,它就可以完美的解决这个问题。

2、动态顺序表

动态顺序表顾名思义它是一个可以动态开辟空间的顺序表,它的空间不是固定的,在我们需要无限的储存数据时,它可以一直帮我们储存,所以动态顺序表用的更加广泛一点,因此我在最后会教大家如何实现动态顺序表。

动态顺序表的结构:

有了动态顺序表的结构,对于后面我们实现动态顺序表就简单了很多,相比于静态顺序表,动态顺序表有了储存数据的地址,我们就可以在空间不够时继续自动开辟空间,从而实现动态的顺序表。

介绍就到这里,后面才是重头戏,请大家跟着小编一起实现动态顺序表吧!

三、动态顺序表的实现

第一步:

刚拿到动态顺序表的结构,我们应该先创建一个动态顺序表,并且将它的所有内容都进行初始化。操作如下:

创建动态顺序表

动态顺序表的初始化

动态顺序表空间的开辟:

进行动态顺序表空间的开辟时应该先判断是否储存的数据个数等于顺序表的容量,如果两者相等的话,才进行空间的开辟,不相等就不开辟,也不会浪费时间和空间。除了第一次开辟剩下都是每次开辟的空间为以前的二倍,这样效率最高。

动态顺序表的尾部插入数据:

在进行尾插的时候应该先判断是否需要开辟空间,再进行尾插,尾部插入也很简单,直接把要插入的数据放入顺序表的 size 坐标下即可。

动态顺序表的头部插入数据:

头插稍微麻烦一点,每次进行头插所有的数据都要往后移动,大家是不是也觉得麻烦,所以后面我们要学链表,它插入数据很简单,不需要移动这么多数据就可以完成,所以头插很麻烦就是顺序表的缺点

尾部数据的删除:

大多数小伙伴一看到这行代码可能会想 “这也没有删除呀?”,刚开始反正我是这样想的,但当我仔细一想,我给 size 减一,不久意味着下次尾插的时候数据会放到刚才size的位置吗,虽然没有删除数据,但下次的值就把它覆盖了,也就相当于删除对吧!

头部数据的删除:

头删只需要把数据向前移动一个位置,再让size--就可以实现头删,下次插入数据时之前size位置的数据会被新的数据所覆盖,所以需要size--。

指定位置插入数据:

指定位置这里指的是下标位置第一个数据的下标为0,一次往后排。其实实现起来也很简单就像上面注释说的,不要忘记插入数据后给size++就行。

删除指定位置数据:

这里的指定位置和上面的一样,都代表的是下标位置,结合注释我相信你一定会理解原理,不要忘记给size--哦。

动态顺序表的销毁:

以上就是动态顺序表的所有内容,增删查改的操作方法都交给大家了,刚开始肯定不好理解,但还是请大家结合代码中注释和代码下面的解释共同理解,相信大家一定会有所收获,理解之后还是希望大家可以自己实现一下顺序表,如果有什么不会的可以私信我或者评论区留言,我会帮大家解答。

 

  • 41
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值