文章目录
(1)线性表
-
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结
构,常见的线性表:顺序表、链表、栈、队列、字符串… -
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

(2)顺序表
1)什么是顺序表
-
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组
上完成数据的增删查改。 -
顺序表:可动态增长的数组,要求数据是连续存储的
2)顺序表的定义
1、静态顺序表:使用定长数组存储元素
- 缺陷:给小了不够用,给大了可能浪费,非常不实用
#define N 10
typedef int SLDataType;
typedef struct SeqList
{
SLDataType array[N]; //定长数组
size_t size; //有效数据个数
}SeqList;
2、动态顺序表:使用动态开辟的数组存储元素
- 动态顺序表可根据我们的需要分配空间大小
- size 表示当前顺序表中已存放的数据个数
- capacity 表示顺序表总共能够存放的数据个数
typedef int SLDataType; //类型重命名,后续要存储其它类型时方便更改
typedef struct SeqList
{
SLDataType* a; //指向动态开辟的数组
size_t size; //有效数据个数
size_t capacity; //容量大小
}SeqList;
2)顺序表的接口实现
首先新建一个工程( 博主使用的是 VS2019 )此次用的是动态顺序表
- SeqList.h(顺序表的类型定义、接口函数声明、引用的头文件)
- SeqList.c(顺序表接口函数的实现)
- Test.c(主函数、测试顺序表各个接口功能)
如图:

- SeqList.h 头文件代码如下:
#pragma once //防止头文件被二次引用
#include<stdio.h> /*perror, printf*/
#include<assert.h> /*assert*/
#include<stdlib.h> /*realloc*/
typedef int SLDataType; //后续要存储其它类型时方便更改
//顺序表的动态存储
typedef struct SeqList
{
SLDataType* a; //指向动态开辟的数组
size_t size; //有效数据个数
size_t capacity; //容量大小
}SeqList;
//初始化顺序表
void SeqListInit(SeqList* psl);
//销毁顺序表
void SeqListDestory(SeqList* psl);
//检查顺序表容量是否满了,好进行增容
void CheckCapacity(SeqList* psl);
//顺序表尾插
void SeqListPushBack(SeqList* psl, SLDataType x);//O(1)
//顺序表尾删
void SeqListPopBack(SeqList* psl);//O(1)
//顺序表头插
void SeqListPushFront(SeqList* psl, SLDataType x);//O(n)
//顺序表头删
void SeqListPopFront(SeqList* psl);//O(n)
//打印顺序表
void SeqListPrint(const SeqList* psl);
//在顺序表中查找指定值
int SeqListFind(const SeqList* psl, SLDataType x);
//在顺序表指定下标位置插入数据
void SeqListInsert(SeqList* psl, size_t pos, SLDataType x)