1.顺序表的概念
顺序表(Sequential List)是一种基本的数据结构,它是一种线性表的存储结构。线性表是一种数据元素的有限序列,元素之间存在顺序关系。
线性表:线性表( linearlist )是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,
线性表在物理上存储时,通常以数组和链式结构的形式存储。
案例:蔬菜分为绿叶类、瓜类、菌菇类。线性表指的是具有部分相同特性的一类数据结构的集合
如何理解逻辑结构和物理结构?
2.顺序表分类
顺序表的底层结构是数组,对数组的封装,实现了常用的增删改查等接口。
静态顺序表:概念:使用定长数组存储元素。
静态顺序表缺陷:空间给少了不够用,给多了造成空间浪费。
动态顺序表:按需申请。
增大扩充的方式:一般采用2倍数扩增。
3.顺序表头文件的实现
我们创建一个顺序表需要以数组为底层结构。我们在这里可以先完成顺序表的头文件.
演示如下:
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
typedef int SLDataType;//方便后续类型更改
//动态顺序表
typedef struct SeqList//重新命名SL
{
SLDataType * arr;//存储数据的底层结构
int capacity;//记录顺序表的空间大小
int size;//记录顺序表当前有效的数据个数
}SL;
void SLIncrspace(SL* ps); //扩容
void SLTnit(SL* ps); //初始化
void SLDestroy(SL* ps);//销毁
void SLInsertFront(SL* ps, SLDataType x);//头插
void SLDelFront(SL* ps);//头删
void SLFind(SL* ps, SLDataType x);//查找
void SLArbiInsert(SL* ps, int seat, int x);//任意位置插入
void SLDelArbi(SL* ps, int seat);//任意位置删除
void SLInsertBack(SL* ps, SLDataType x);//尾插
void SLDelBack(SL* ps);//尾删
void SLprint(SL* ps); //打印顺序表
这些都是我们实现顺序表需要用到的函数。下一期我们将一个一个实现它们。这些函数的取名方式最好以它们的功能相对应。我们将int重定义为SLDataType是为了以后方便更改顺序表的数据类型。大家可以先试试怎样实现它们。大家实现顺序表尽量使用动态顺序表,这样的话可以避免数据丢失。(因为静态顺序表的储存是有限的)