顺序表的定义
线性表的顺序存储
静态分配的顺序表
#define Maxsize 10
typedef struct{
ElemType data[Maxsize];
int length;
} SqList;
动态分配的顺序表
#define MaxSize 10
typedef struct{
ElemType *data;
int MaxSize;
int length;
} SeqList;
动态分配的顺序表经常使用malloc()和free()函数,下面通过初始化和扩充存储空间举例理解:
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10
typedef struct
{
int *data;
int MaxSize;
int length;
} SeqList;
void InitList(SeqList &L);
void IncreaseSize(SeqList &L, int len);
int main()
{
SeqList L;
InitList(L);
IncreaseSize(L, 5);
return 0;
}
void InitList(SeqList &L)
{
L.data = (int *)malloc(InitSize * sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
void IncreaseSize(SeqList &L, int len)
{
int *p = L.data;
L.data = (int *)malloc((L.MaxSize + len) * sizeof(int));
for (int i = 0; i < L.length; i++)
{
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize + len;
free(p);
}
顺序表的特点:
- 随机访问,在O(1)时间内找到第i个元素
- 存储密度高,每个节点只存放数据元素
- 拓展容量不方便(即便采用动态分配的方式实现,拓展长度的时间复杂度也比较高)
- 插入删除操作不方便,需要移动大量元素