顺序表的定义

线性表的顺序存储

静态分配的顺序表

#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);
}

顺序表的特点:

  1. 随机访问,在O(1)时间内找到第i个元素
  2. 存储密度高,每个节点只存放数据元素
  3. 拓展容量不方便(即便采用动态分配的方式实现,拓展长度的时间复杂度也比较高)
  4. 插入删除操作不方便,需要移动大量元素