TDA Vector con Memoria Dinámica

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define CAP 100
#define SIN_MEM 0
#define DUPLICADO 2
#define TODO_OK 1


typedef struct
{
int * vec;
int cap;
int ce;
} Vector;



bool crearVector(Vector *);
int insertarEnOrden(Vector *, int );
void mostrar(const Vector *);
bool VectorEliminarOrdenado( Vector *, int);
int vectorVacio (const Vector *v);
int vectorLleno (const Vector *v);
int insertarAlFinal(Vector *, int );
int verCantElementos( const Vector *);
void destruirVector ( Vector *);

int main ()
{
Vector v;
crearVector(&v);
insertarEnOrden(&v,5);
insertarEnOrden(&v,2);
insertarEnOrden(&v,6);
insertarEnOrden(&v,12);
insertarEnOrden(&v,11);
insertarEnOrden(&v,7);
mostrar(&v);
printf("\n");
VectorEliminarOrdenado(&v,6);
mostrar(&v);
destruirVector(&v);
printf("\n");
return 0;

}


bool crearVector(Vector *v)
{
v-> vec = (int*) malloc( 8*sizeof(int));
if(!v->vec) //pl->vec == NULL
return false;
v->ce=0;
v->cap = 8;
return true;
}

int insertarEnOrden( Vector *v, int elem)
{
int ncap;
int *nvec;
if( v->ce == v->cap)
{
ncap = v->cap*2;
nvec = (int*)realloc(v->vec, ncap*sizeof(int));
if(!nvec)
return SIN_MEM;
v->vec= nvec;
v->cap = ncap;
}
int *i = v->vec;
int *ult= v->vec+(v->ce-1);
while(i <= ult && elem > *i)
i++;
// chequear si hay duplicados
if(i <= ult && elem == *i)
return DUPLICADO;
for( int *j=ult; j>=i; j--)
*(j+1) = *j;

*i = elem;
v->ce++;
return TODO_OK;

}


bool VectorEliminarOrdenado(Vector* v, int elem)
{
if(v->ce*3 <= v->cap) // si un tercio del vector esta cargado
{
v->cap/=2;
v->vec = (int*)realloc(v->vec,v->cap*sizeof(int)); // esta reduciendo, no necesito guardar en variables temporales porque no va a tirar error xq va a achicar la capacidad.
}
int *i = v->vec;
int *ult = v->vec +(v->ce-1);
while(i<=ult && elem >*i)
i++;
if(i>ult || elem < *i)
return false;
for( int *j=i+1; j<=ult; j++)
*(j-1)=*j;
v->ce--;
return true;
}

void mostrar( const Vector *v)
{
int cant = v->ce;
int *elem = v->vec;
while(cant!=0)
{
printf("%d\n", *elem);
elem++;
cant--;
}
}


void destruirVector(Vector *v)
{
free(v->vec);
}