相比上一篇博客所写的静态顺序表,本篇介绍的动态版本主要通过增加动态扩容以及内存资源回收两个接口实现动态顺序表
使得顺序表的使用相较上一个版本比较灵活
具体实现代码:
SeqList.h
#ifndef __SEQLIST_D_H__
#define __SEQLIST_D_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
typedef int DataType;
#define INIT_NUM 3
#define INC_NUM 3
typedef struct seqlist
{
DataType* data;
int _size;
int _capacity;
}SeqList,*pSeqList;
//初始化
void InitSeqList(pSeqList plist)
{
assert(NULL != plist);
plist->data = (DataType*)malloc(sizeof(DataType)*INIT_NUM);
memset(plist->data, 0, sizeof(DataType)*INIT_NUM);
plist->_capacity = INIT_NUM;
plist->_size = 0;
}
//检测顺序表容量,若不够则扩容
void CheckCapacity(pSeqList plist)
{
assert(NULL != plist);
if (plist->_capacity == plist->_size)
{
DataType* tmp = (DataType*)realloc(plist->data, sizeof(DataType)*(plist->_capacity + INC_NUM));
plist->data = tmp;
plist->_capacity += INC_NUM;
}
}
//销毁
void DestroySeqList(pSeqList plist)
{
assert(NULL != plist);
plist->_size = 0;
plist->_capacity = 0;
free(plist->