链表的可变数组的实现和一些基本操作
有兴趣的自己看代码,里面有注释
#include<stdio.h>
#include<stdlib.h>
#define BLOCK 20
typedef struct _array{
int *array;
int size;
}Array;
Array array_create(int init_size);
int* array_at(Array *a,int index);
void array_inflate(Array *a,int more_size);
void array_swap(Array *a,int cnt);
Array array_create(int init_size)
{ //返回一个结构体的a,这个方法不错
Array a;
a.size = init_size;
a.array = (int*)malloc(sizeof(int)*a.size);
return a;
}
int *array_at(Array *a,int index)
{
if (index >= a->size-1)
{
array_inflate(a,(index/BLOCK+1)*BLOCK - a->size);
}
return &(a->array[index]);
}
void array_inflate(Array *a,int more_size)
{
int *p = (int*)malloc(sizeof(int)*(a->size + more_size));
//memcpy(p,a,)
for(int i=0;i < a->size;i++)
{
p[i] = a->array[i];
}
free(a->array);
a->array = p;
a->size = a->size + more_size;
}
void array_swap(Array *a,int cnt)
{
//int len = cnt;
//int i = 0;
for (int i=0;i < cnt/2;i++)
{
int temp = a->array[i];
a->array[i] = a->array[cnt-i-1];
a->array[cnt-i-1] = temp;
}
}
int main()
{
Array a = array_create(5);
int number = 0;
int cnt = 0;
while(number != -1)
{
scanf("%d",&number);
if (number != -1)
{
*array_at(&a,cnt++) = number;
}
}
array_swap(&a,cnt);
for (int i = 0;i < cnt-1;i++)
{
printf("%d ",a.array[i]);
}
printf("%d\n",a.array[cnt-1]);
return 0;
}