线性表与顺序表
线性表是 n 个具有相同特性的数据元素的有限序列,属于逻辑上的线性结构。在物理存储上,它通常采用顺序结构或链式结构。常见的线性表包括顺序表、链表、栈、队列等。
什么是顺序表?
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,底层通常基于数组实现。虽然很多人容易将顺序表等同于数组,但顺序表实际上是对数组的封装,提供了增删查改等常用接口,管理起来更加规范。
顺序表的分类
静态顺序表
静态顺序表使用定长数组存储元素。其缺点在于空间固定,初始化时若预留过多会造成浪费,预留不足则无法插入新数据。
动态顺序表
动态顺序表的空间按需申请,能够根据实际数据量灵活调整内存大小,避免了空间浪费或溢出的问题。
动态顺序表的实现
为了模块化开发,我们通常采用三文件协同的方式:头文件声明、源文件实现、测试文件验证。
1. 头文件 (SeqList.h)
这里定义了顺序表的结构体以及函数原型。使用 typedef 重命名类型,方便后续维护。
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// 定义数据类型
#define SLTDataType int
// 定义顺序表结构
typedef struct SeqList {
SLTDataType* arr; // 存储数据的指针
int size; // 有效数据个数
int capacity; // 当前分配的容量
} SL;
// 函数声明
void SLInit(SL* ps);
void SLPushBack(SL* ps, SLTDataType x);
void SLPushFront(SL* ps, SLTDataType x);
void SLPrint(SL* ps);


