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

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/

相关推荐
OKkankan3 小时前
python 进阶(三):面向对象进阶——从“会写 class”到设计可维护的后端对象
开发语言·数据结构·python
闻缺陷则喜何志丹4 小时前
vc入门宝典(九)
数据结构·list·mfc·存储·null·class
quaer16 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
xys_67820 小时前
深挖数据结构:树和二叉树(上)
数据结构·算法
BeiGuTing_code20 小时前
Java动态数组(一)
java·数据结构·windows
Code_Solitude1 天前
传智杯备赛代码整理(前4题)
数据结构·算法
Jasmine_llq1 天前
《P8816 [CSP-J 2022] 上升点列》
数据结构·算法·贪心·排序·二维动态规划 dp·类背包状态转移
辛苦才能1 天前
C++ 哈希表深度解析:删除为什么必须打标记,负载因子为什么卡 0.7
开发语言·数据结构·c++·算法
JasmineX-11 天前
数据结构(笔记)——顺序栈
c语言·数据结构·笔记