数据结构(2)

目录

一、线性表

二、顺序表

[2.1 概念与定义](#2.1 概念与定义)

[2.2 分类](#2.2 分类)

[2.2.1 静态顺序表](#2.2.1 静态顺序表)

[2.2.2 动态顺序表](#2.2.2 动态顺序表)

2.3顺序表的初始化和销毁

[2.4 顺序表的后插和头插](#2.4 顺序表的后插和头插)

[2.5 顺序表的尾删和头删](#2.5 顺序表的尾删和头删)

[2.6 顺序表指定位置的插入和删除](#2.6 顺序表指定位置的插入和删除)

[2.7 顺序表查找数据](#2.7 顺序表查找数据)


一、线性表

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种实际中广泛使用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串......

线性表在逻辑上是线性结构,也就是说连续的一条直线。但在物理结构上并不一定是连续的。线性表在物理上存储时,通常是以数组和链式结构的形式存储。

二、顺序表

2.1 概念与定义

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。

顺序表的底层结构是数组,对数组进行的封装,实现了常用的增删改查等接口。

2.2 分类

2.2.1 静态顺序表

概念:使用定长数组存储元素。

SLDataType a[8]是定长数组;

int size 是有效数据个数

静态顺序表的缺陷是:空间给少了不够用,给多了造成空间的浪费

2.2.2 动态顺序表

首先,我们先定义了动态顺序表。如上述代码所示:

2.3顺序表的初始化和销毁

接着,我们定义顺序表的初始化和销毁;

注意这里需要传地址;在每写完一个后记得及时测试;

2.4 顺序表的后插和头插

尾插分为两种情况:

1、空间充足,将数据插入size指向的位置,size++

2、空间不足,先增容,再插入

增容一般呈倍数增加,比如2->.4->8->16......

增容也分为两种情况:

1、连续空间足够,直接扩容

2、连续空间不够,重新找一块地址,分配足够的内存,拷贝数据到新的地址,销毁旧的地址

在这里我们使用realloc函数来增容;在写尾插后,就可以进行测试,并写出打印顺序表的函数。

由于头插和尾差一样也需要先判断空间是否足够,因此我们可以将扩容写成一个函数

接下来,我们就可以实现头插的操作

即原数组整体后移一位。且注意:因为是后移一位,所以应该从最后一位开始移动。

2.5 顺序表的尾删和头删

尾删的实现:

ps->arr[ps->size-f] = 0;

ps->size--;

注意:若顺序表为空,不可删除

则就要对size进行assert进行断言

在头删时,将第一个位置以后的数据从后往前移动一位;

2.6 顺序表指定位置的插入和删除

首先,我们先判断插入位置pos位于顺序表中;

在pos之后的数据整体往后移动一位

再插入对应的数据;

注:在删除pos的位置时,pos不能等于size

在删除指定位置时候,pos之后的数据整体向前挪动一位

之后size--就可以实现

2.7 顺序表查找数据

查找这里较为简单。不做过多叙述

由此,顺序表的基本就完成了。

相关推荐
阿让啊26 分钟前
C语言中操作字节的某一位
c语言·开发语言·数据结构·单片机·算法
草莓啵啵~1 小时前
搜索二叉树-key的搜索模型
数据结构·c++
丶Darling.2 小时前
26考研 | 王道 | 数据结构 | 第八章 排序
数据结构·考研·排序算法
我也不曾来过13 小时前
list底层原理
数据结构·c++·list
mit6.8244 小时前
[贪心_7] 最优除法 | 跳跃游戏 II | 加油站
数据结构·算法·leetcode
keep intensify4 小时前
通讯录完善版本(详细讲解+源码)
c语言·开发语言·数据结构·算法
shix .4 小时前
2025年PTA天梯赛正式赛 | 算法竞赛,题目详解
数据结构·算法
egoist20235 小时前
【C++指南】告别C字符串陷阱:如何实现封装string?
开发语言·数据结构·c++·c++11·string·auto·深/浅拷贝
Gsen28195 小时前
AI大模型从0到1记录学习 数据结构和算法 day20
数据结构·学习·算法·生成对抗网络·目标跟踪·语言模型·知识图谱
一定要AK5 小时前
天梯——L1-110 这不是字符串题
数据结构·c++·算法