#define INIT_SIZE 10
typedef struct DSqlist
{
int *elem;
int usedsize;
int size;
}DSqlist;
void InitDSqlist(DSqlist *plist);
static bool IsFull(DSqlist *plist);
static void Inc(DSqlist *plist);
void Destroy(DSqlist *plist);
bool Insert(DSqlist *plist,int pos,int val);
int GetSize(DSqlist *plist);
int GetUsedSize(DSqlist *plist);
void Show(DSqlist *plist);
#endif
#include "dsqlist.h"
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
void InitDSqlist(DSqlist *plist)
{
assert(plist!=NULL);
plist->elem=(int *)malloc(sizeof(int)*INIT_SIZE);
assert(plist->elem!=NULL);
plist->size=INIT_SIZE;
plist->usedsize=0;
}
static bool IsFull(DSqlist *plist)
{
return plist->size==plist->usedsize;
}
static void Inc(DSqlist *plist)
{
int *p=plist->elem;
plist->elem=(int *)malloc(sizeof(int)*plist->size*2);
for(int i=0;i<plist->size;i++)
{
plist->elem[i]=p[i];
}
assert(plist->elem!=NULL);
plist->usedsize=plist->size;
plist->size*=2;
}
void Destroy(DSqlist *plist)
{
plist->elem=NULL;
free(plist->elem);
plist->size=0;
plist->usedsize=0;
}
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+=1;
return true;
}
int GetUsedSize(DSqlist *plist)
{
return plist->usedsize;
}
int GetSize(DSqlist *plist)
{
return plist->size;
}
void Show(DSqlist *plist)
{
for(int i=0;i<plist->usedsize;i++)
{
printf("%d ",plist->elem[i]);
}
printf("\n");
}
#include "dsqlist.h"
#include <stdio.h>
int main()
{
DSqlist plist;
InitDSqlist(&plist);
for(int i=0;i<plist.size;i++)
{
Insert(&plist,0,i);
}
Show(&plist);
printf("%d\n",GetUsedSize(&plist));
printf("%d\n",GetSize(&plist));
Insert(&plist,10,10);
Show(&plist);
printf("%d\n",GetUsedSize(&plist));
printf("%d\n",GetSize(&plist));
}