数据结构之顺序表

首先我们回忆一下逻辑结构的分类,有线性结构,树形结构以及图形结构,线性结构中不受限制的线性表用顺序存储的存储方式存储就是顺序表,顺序表可以代表一个完整的顺序表。

首先研究一下逻辑结构:线性表,有三个主要的特点(所有数据元素的数据类型都相同,有限个,序列)

存储结构:顺序存储,可以静态实现也可以动态实现

基本操作:创建销毁,增删查改

从这里开始细致讲解一下静态存储和动态存储的区别:

程序开始,首先定义数据元素,重命名为elemtype,这样不论是结构体还是原子类型的数据类型都可以用它来表示,程序更容易读懂,然后开始创建顺序表,如果是静态实现,则结构体中有一个数据元素类型的数组以及一个num变量用来记录目前存入了多少个数据元素,然后在主函数中创建这个结构体就等于创建完了这个数据结构。

若是动态实现,创建结构体时我们需要改一下,结构内部没有数组,有一个指向数据元素类型的指针,用来接收malloc得到的首元素指针,而且后面若空间不够需要扩大,则使用realloc或者malloc都可以实现。

在实际操作中,增我们要注意是否已经满了,插入的位置是否正确,并且要找准向后移动哪些元素

删除的时候要判断是否空了,还要判断是否位置合法

其他操作比较简单。

有几个比较经典的习题:

1、删除符合某种条件的数字:有三种思路

第一种就是最普通的删除,遍历这个数组的时候碰到需要删除的数字,将后面所有的向前移即可,时间复杂度n的平方

第二种是是空间换时间,创建一个新数组,将不需要删除即不满足删除条件的数据移到这个新的数组中,这段空间是用来辅助的,因此空间复杂度为n,时间复杂度为n

第三种是双指针法,一个指针用来遍历所有元素,另一个指针用来指向合法存储的空间

2、两个数组的合并

第一种是创建一个新的数组,双指针法分别遍历两个数组,最后将没有遍历完的数组移到新数组即可

第二种,若不额外开创空间,我们需要保证有一个数组的空间是足够装开这两个数组的,然后从最后开始填充,先找最大的放到最后,直至有一个数组遍历到头,然后将另一个数组中的元素依次挪进去即可

冒泡排序、逆序、二分查找、空间辅助这几个方法非常重要

顺序表的优点:从存储结构来看,存储密度高,从操作看,支持随机存取

缺点:从存储结构看,无法扩充空间或扩充空间时间复杂度高,从操作上看,插入删除的时间复杂度很高

相关推荐
by2099921 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Code_Solitude21 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
Pniubi1 天前
快速排序(力扣基础)(递归)
java·数据结构·算法
inrichtt1 天前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger1 天前
数据结构——选择排序
数据结构·算法·排序算法
丑梨数据1 天前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓1 天前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
CS创新实验室2 天前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1012 天前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
从小白到软工2 天前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程