之前写到过c语言静态顺序表,接着我们来实现动态的顺序表
我们先来分析下这两者的不同
静态顺序表:结构体只需两个成员,其中一个固定大小的数组(MAX)的数组,用来存放我们的数据。当数据增多时,可以通过改变数组大小而存 放更多数据。
动态顺序表:在内存中开辟一块空间,可以随着我们数据数量的增多来扩容。
接着来看代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#define MAX 3//最开始开辟可存放MAX个数据的空间
#define INCS 2//每次增容的大小
typedef int DataType;
typedef struct SeqList
{
DataType*data;
int capacity;
int sz;
}Seqlist, *pSeqList;
void InitSeqList(pSeqList ps)//先开辟一块空间并且初始化
{
ps->data = (DataType*)malloc(MAX*sizeof(DataType));
if (ps->data == NULL)
{
perror("malloc");
exit(EXIT_FAILURE);
}
memset(ps->data, 0, MAX*sizeof(DataType));
ps->sz = 0;
ps->capacity = MAX;
}
void Check(pSeqList ps)//检查是否要增容
{
assert(ps != NULL);
if (ps->sz == ps->capacity)
{
DataType*tmp = (DataType*)realloc(ps->data, (ps->capacity + INCS)*sizeof(DataType));
if (tmp == NULL)
{
perror("realloc");
exit(EXIT_FAILURE);
}
ps->data = tmp;
ps->capacity += INCS;
}
}
void PushBack(pSeqList ps, DataType x)
{
assert(ps != NULL);
Check(ps);
ps->data[ps->sz] = x;
ps->sz++;
}
void PrintSeqList(pSeqList ps)//打印
{
assert(ps != NULL);
if (ps->sz == 0)
{
return;
}
int i = 0;
fo