数据结构第二课:顺序表揭秘

1.线性表

线性表是n个具有相同特性(逻辑结构和物理结构) 的数据元素的有限序列

tip:

逻辑结构:一定是连续的

物理结构:不一定是连续的

常见的线性表有:顺序表、链表、栈、队列、字符串...

2.顺序表

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

2.1顺序表的分类

顺序表分为:静态顺序表(使用定长数组存储元素)和动态顺序表(底层的数组空间在不断变化)

2.1.1静态顺序表

明确知道要存储多少数据的情况下,静态顺序表更简单,因为静态顺序表结构体里只有两个成员(数组和整形变量size)

这里对 int 取别名,是为了方便后续一键修改

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

2.1.2动态顺序表

动态顺序表底层的数组空间在不断变化

动态顺序表比静态顺序表还要再增加4个字节,因此结构大小更大,绝大多数情况下动态顺序表更适用。

2.1.3传值与传地址的对比

传值:拷贝变量本身的值,改副本,原值不变

. 运算符

适用结构体普通变量

语法:结构体变量.成员名

传指针:拷贝地址值 (本质依然是传值!只是拷贝内容是地址);拿到地址后解引用 * 可以修改原变量

-> 运算符

适用结构体指针

语法:结构体指针->成员名

等价于:(*结构体指针).成员名

2.1.4补充:

malloc:申请固定大小空间

calloc:malloc+初始化

realloc:增加空间

2.2顺序表常见操作的代码实现

顺序表学习.h

.h 头文件(类比目录)

定义结构

声明函数

顺序表学习.c

.c实现文件

#include "xx.h"

test.c

test.c 测试文件

2.3 顺序表算法题

2.3.1 移除元素

https://leetcode.cn/problems/remove-element/description/

2.3.2 删除有序数组中的重复项

https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/

2.4.3 合并两个有序数组

https://leetcode.cn/problems/merge-sorted-array/description/

相关推荐
布莱克60515 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH18 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
zh_xuan1 天前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
白杨尚青1 天前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树
likexuec2 天前
数据结构(2)
数据结构
D e re k ZH2 天前
C++ 标准库算法全景指南
数据结构·c++·算法
冻柠檬飞冰走茶2 天前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
十二3 天前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
D e re k ZH3 天前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
careathers3 天前
【数据结构】基于比较的排序算法 - 交换排序
数据结构·算法·排序算法