//线性表的动态分配
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define INIT_SIZE 10
typedef struct DSqlist
{
int *elem;
int usedsize;//有效数据个数
int size;//当前分配的存储的容量
}DSqlist
void InitDSqlist(DSqlist*plist)
{
assert(plist!=NULL);
plist->elem=(int*)malloc(INIT_SIZE*sizeof(int));
assert(plist->elem!=NULL)//断言创建成功
plist->usedsize=0;
plist->size=INIT_SIZE;
}
static bool IsFull(DSqlist *plist)
{
return plist->usesize==plist->size;
}
static void Inc(DSqlist *plist)
{
}
bool Insert(DSqlist*plist,int pos,int val)
{
if(pos<0 || pos>plist->usedsize)
{
return false;
}
if(IsFull(plist))
{
Inc(plist);
}
for(int i=plist->usedsize-1;i>=pos;i--)
{
plist->elem[i+1]=plist->elem[i];
}
plist->elem[pos]=val;
plist->usedsize++;
return true;
}
bool Delete(DSqlist *plist,int pos)
{
if(pos<0 || pos>=plist->usedsize)
{
return true;
}
for(int i=0;i<plist->usedsize-1;i++)
{
plist->elem[i]=plist->elem[i+1];
}
plist->usedsize--;
return true;
}
int Getlength(DSqlist *plist)
{
return plist->usedsize;
}
int GetElem(DSqlist *plist,int pos,int *rtval)
{
if(pos <0 ||pos>=plist->usedsize)
{
return false;
}
*rtval=plist->elem[pos];
return true;
}
void Show(DSqlist *plist)
{
for(int i=0;i<plist->usedsize;i++)
{
printf("%d",plist->elem[i]);
}
printf("\n");
}
void Destroy(DSqlist *plist)
{
free(plist->elem);//释放完以后是野指针
plist->usedsize=0;
plist->elem=NULL;
plist->size=0
}