SeqlistD.h
#pragma once
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int DataType;
typedef unsigned int size_t;
typedef struct SeqListD
{
DataType* _array;
size_t _capacity; // 底层空间的大小
size_t _size; // 有效元素的个数
}SeqListD, *PSeqListD;
/
void SeqListDInit(PSeqListD pSeq);
void SeqListDPushBack(PSeqListD pSeq, DataType data);
void SeqListDPopBack(PSeqListD pSeq);
void SeqListDInsert(PSeqListD pSeq,int pos,DataType data);
void SeqListDErase(PSeqListD pSeq,int pos);
int SeqListDEmpty(PSeqListD pSeq);
size_t SeqListDSize(PSeqListD pSeq);
// 清空顺序表中的所有元素,注意不改变底层空间的大小
void SeqListDClear(PSeqListD pSeq);
size_t SeqListDCapacity(PSeqListD pSeq);
// 销毁顺序表
void SeqListDDestroy(PSeqListD pSeq);
// 检测顺序表是否需要增容
int CheckCapacity(PSeqListD pSeq);
void PrintfSeqlistD(PSeqListD pSeq);
void SeqListDInit(PSeqListD pSeq) //初始化
{
if(NULL==pSeq)
return;
pSeq->_array=(DataType* )malloc(3*sizeof(DataType));
pSeq->_capacity=3;
pSeq->_size=0;
}
void SeqListDPushBack(PSeqListD pSeq, DataType data) //尾插
{
if(NULL==pSeq)
return;
CheckCapacity(pSeq);
pSeq->_array[pSeq->_size++]=data;
}
void SeqListDPopBack(PSeqListD pSeq) //尾删
{
if(NULL==pSeq)
return;
pSeq->_array[pSeq->_size-1]=0;
pSeq->_size--;
}
void SeqListDInsert(PSeqListD pSeq,int pos,DataType data) //任意位置插入
{
int i=0;
if(NULL==pSeq)
return;
CheckCapacity(pSeq);
for (i=pSeq->_size-1;i>=pos-1;i--)
{
pSeq->_array[i+1]=pSeq->_array[i];
}
pSeq->_array[pos-1]=data;
pSeq->_size++;
}
void SeqlistDErase(PSeqListD pSeq,int pos) //任意位置删除
{
int i=0;
if(NULL==pSeq)
return;
for (i=pos;i<pSeq->_size;i++)
{
pSeq->_array[i-1]=pSeq->_array[i];
}
pSeq->_size--;
}
size_t SeqListDSize(PSeqListD pSeq)
{
if(NULL==pSeq)
exit(EXIT_FAILURE);
return pSeq->_size;
}
// 清空顺序表中的所有元素,注意不改变底层空间的大小
void SeqListDClear(PSeqListD pSeq)
{
if(NULL==pSeq)
return;
pSeq->_size=0;
}
size_t SeqListDCapacity(PSeqListD pSeq)
{
if(NULL==pSeq)
exit(EXIT_FAILURE);
return pSeq->_capacity;
}
// 销毁顺序表
void SeqListDDestroy(PSeqListD pSeq)
{
if(NULL==pSeq)
return;
free(pSeq->_array);
pSeq->_array=NULL;
pSeq->_capacity=0;
pSeq->_size=0;
}
// 检测顺序表是否需要增容
int CheckCapacity(PSeqListD pSeq)
{
DataType* tmp=NULL;
if(NULL==pSeq)
return 0;
if(pSeq->_capacity==pSeq->_size)
{
size_t newCapacity=pSeq->_capacity*2;
tmp=(DataType*)realloc(pSeq->_array,newCapacity*sizeof(DataType));
if(NULL==tmp)
return 0;
pSeq->_array=tmp;
pSeq->_capacity=newCapacity;
}
return 0;
}
void PrintfSeqlistD(PSeqListD pSeq)
{
size_t i=0;
if(NULL==pSeq)
return;
for (;i<pSeq->_size;i++)
{
printf("%d ",pSeq->_array[i]);
}
printf("\n");
}
testSeqlistD.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqlistD.h"
void testSelistD()
{
SeqListD s;
SeqListDInit(&s);
SeqListDPushBack(&s,1); //尾插
SeqListDPushBack(&s,2);
SeqListDPushBack(&s,3);
SeqListDPushBack(&s,4);
SeqListDPushBack(&s,5);
SeqListDPushBack(&s,6);
printf("Capacity = %u ",SeqListDCapacity(&s));
printf("Size = %u \n",SeqListDSize(&s));
PrintfSeqlistD(&s);
// SeqListDPopBack(&s); //尾删
SeqListDInsert(&s,2,9); //任意位置插入
printf("Capacity = %u ",SeqListDCapacity(&s));
printf("Size = %u \n",SeqListDSize(&s));
PrintfSeqlistD(&s);
SeqlistDErase(&s,7); //任意位置删除
printf("Capacity = %u ",SeqListDCapacity(&s));
printf("Size = %u \n",SeqListDSize(&s));
PrintfSeqlistD(&s);
SeqListDDestroy(&s); //在结束时应该销毁申请的堆空间,否则会造成内存泄漏
}
int main()
{
testSelistD();
return 0;
}