1. 顺序表的结构
(1) 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。
2. 顺序表的特点
(1)空间连续。
(2)支持随机访问。
(3)尾插尾删操作时间复杂度都是O(1)。
(4)其他位置(除过尾部)插入删除都是0(n)。
(5)空间利用率高,不容易造成内存碎片。
(6)适合访问存储。
(7)增容代价大,增容一般是呈2倍增长,势必会有一定的空间浪费。
(8)增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗。
3.顺序表的实现
1. 静态顺序表:使用定长数组存储。
#define N 100
typedef int SLDataType;
//静态顺序表
struct seqlist2
{
SLDataType data[N];//定长数组
int size; //有效数据个数
};
//动态顺序表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct seqList
{
SLDataType* data; //数组指针
int size; //有效元素个数
int capacity;//数组的空间
}seqList; //sizeof(seqlist)=12
//初始化顺序表
void initseqList(seqList* sl);
//尾插
void seqListPushBack(seqList* sl, SLDataType val);
//尾删
void seqListpopBack(seqList* sl);
//检查容量
void seqListCheckCapacity(seqList* sl);
//打印
void seqListPrint(seqList* sl);
//访问任意位置的元素
SLDataType seqListAt(seqList* sl, int pos);
//判空
int seqListEmpty(seqList* sl);
//有效元素个数
int seqListSize(seqList* sl);
//头插
void seqListPushFront(seqList* sl, SLDataType val);
//头删
void seqListPopFront(seqList* sl);
//任意位置插入
void seqListInsert(seqList* sl, int pos, SLDataType val);
//任意位置删除
void seqListErase(seqList* sl, int pos);
//销毁
void seqListDestroy(seqList