动态顺序表(不定长顺序表)
顺序表的容量在动态时期(运行期间)确定,大小可改变。
typedef struct DSeqList
{
int* elem;//指向存储数据的内存
int length;//有效数据个数
int listsize;//总格子数(开辟的总单元个数)
}DSeqList,*PDSeqList;
dseqlist.h
void InitSeqList(PDSeqList ps);//初始化
bool Insert(PDSeqListps,int pos,int val);//在pos位置插入val
bool Deletepos(PDSeqList ps,int pos);//删除pos位置
int Search(PDSeqList ps,int key);//查找关键字key
bool DeleteVal(PDSeqList ps,int key);//删除关键字key
void Clear(PDSeqList ps);//清除顺序表数据
bool IsEmpty(PDSeqList ps);//判断是否为空
int GetLength(PDSeqList ps);//得到顺序表的有效长度
void Destroy(PDSeqList ps);//摧毁顺序表
void Show(PDSeqList ps);//打印顺序表
dseqlist.cpp
初始化:
void InitSeqList(PDSeqList ps)
{
assert(ps != NULL);
if(ps == NULL)
{
return;
}
ps->elem = (int*)malloc(INIT_SIZE*sizeof(int));
ps->length = 0;
ps->listsize = INIT_SIZE;
}
在pos位置插入val:
static bool lsFull(PDSeqList ps)
{
return ps->length == ps->list-size;
}
//扩容
static void lnc(PDSeqList)
{
ps->elem = (int*)realloc(ps->elem,ps->listsize*2*sizeof(int));
//不需要处理
ps->length;
ps->listsize *= 2;//2只要经验值
}
bool Insert(PDSeqListps,int pos,int val)
{
if(pos<0 || pos > ps->length)
{
return false;
}
if(lsFull(ps))
{
lnc(ps);
}//容量一定足够
for(int i=ps->length-1;i >= pos;i--)
{
ps->elem[i+1] = ps->elem[i];
}
ps->elem[pos] = val;
ps->length++;
return true;
}
删除pos位置:
bool DeletePos(PDSeqList ps,int pos)
{
assert(ps != NULL);
if(pos < 0 || pos >= ps->length)
{
return false;
}
for(int i = pos;i < ps->length - 1;i++)
{
ps->elem[i] = ps->elem[i+1];
}
ps->length--;
return true;
}
查找关键字key:
int Search(PDSeqList ps,int key)//查找函数
{
assert(ps != NULL);
for(int i = 0;i < ps->length;i++)
{
if(ps->elem[i] == key)
{
return i;
}
}
return -1;
}
删除关键字key:
bool DeleteVal(PDSeqList ps,int key)
{
int index = Search(ps,key);
if(index < 0)
{
return false;
}
return DeletePos(ps,index);
}
清除顺序表数据:
扫描二维码关注公众号,回复:
8687415 查看本文章
void Clear(PDSeqList ps)
{
ps->length = 0;
}
判断是否为空:
bool lsEmpty(PDSeqList ps)
{
return ps->length == 0;
}
得到顺序表的有效长度:
int GetLength(PDSeqList ps)
{
return ps->length;
}
摧毁顺序表:
void Destroy(PDSeqList ps)
{
free(ps->elem);
ps->elem = NULL;
}
打印顺序表:
void Show(PDSeqList ps)
{
for(int i = 0;i < ps->length;i++)
{
printf("%d",ps->elem[i]);
}
printf("\n");
}