#include<stdio.h>#include<stdlib.h>#include<time.h>typedefstruct Vector{int*data;int length,size;}Vec;
Vec *init(int n){
Vec *v=(Vec *)malloc(sizeof(Vec));
v->data=(int*)malloc(sizeof(int)*n);
v->length=0;
v->size=n;return v;}voidclear(Vec *v){if(v==NULL)return;free(v->data);free(v);return;}intexpand(Vec *v){int extr_size=v->size;//设置临时变量,防止原来数据字段的地址丢失,int*p;//扩大地址,如果不够两倍,变为原来的1/2再次尝试扩容。while(extr_size){
p=(int*)realloc(v->data,sizeof(int)*(v->size+extr_size));//如果p不为空,扩容成功。if(p)break;
extr_size/=2;}if(extr_size==0)return0;
v->data=p;
v->size+=extr_size;return1;}//1为插入成功intinsert(Vec *v,int val,int ind){if(ind<0||ind>v->length)return0;if(v==NULL)return0;if(v->length==v->size){if(!expand(v))return0;printf("success to expand the Vector size is %d\n",v->size);}for(int i=v->length;i>ind;i--){
v->data[i]=v->data[i-1];}
v->data[ind]=val;
v->length+=1;return1;}interase(Vec *v,int ind){if(v==NULL)return0;if(ind<0||ind>=v->length)return0;for(int i=ind+1;i<v->length;i++){
v->data[i-1]=v->data[i];}
v->length-=1;return1;}voidoutput(Vec *v){if(v==NULL)return;printf("[");for(int i=0;i<v->length;i++){
i&&printf(" ");printf("%d",v->data[i]);}printf("]\n");return;}intmain(){srand(time(0));#define max_op 20
Vec *v=init(5);for(int i=0;i<max_op;i++){int val=rand()%100;int ind=rand()%(v->length+2)-1;//测试负数和大于的操作int op=rand()%4;//操作0,1,2插入,3为删除switch(op){case0:case1:case2:printf("insert %d at %d to Vector = %d\n",val,ind,insert(v,val,ind));break;case3:printf("erase a iterm at %d from Vector=%d\n",ind,erase(v,ind));break;}output(v);printf("\n");}clear(v);#undef max_opreturn0;}
//输出结果 0表示失败,1表示成功
erase a iterm at 0 from Vector=0[]
insert 53 at -1 to Vector =0[]
erase a iterm at -1 from Vector=0[]
erase a iterm at -1 from Vector=0[]
insert 41 at 0 to Vector =1[41]
insert 78 at 0 to Vector =1[7841]
insert 53 at 0 to Vector =1[537841]
erase a iterm at -1 from Vector=0[537841]
insert 63 at -1 to Vector =0[537841]
erase a iterm at 2 from Vector=1[5378]
insert 9 at 0 to Vector =1[95378]
insert 49 at 0 to Vector =1[4995378]
erase a iterm at 2 from Vector=1[49978]
erase a iterm at 0 from Vector=1[978]
erase a iterm at 2 from Vector=0[978]
insert 61 at 0 to Vector =1[61978]
insert 26 at 1 to Vector =1[6126978]
insert 33 at 3 to Vector =1[612693378]
success to expand the Vector size is 10
insert 4 at 0 to Vector =1[4612693378]
erase a iterm at -1 from Vector=0[4612693378]