链表的可变数组的实现和一些基本操作

来源:互联网 发布:横截面数据是指同一 编辑:程序博客网 时间:2024/04/30 11:06

链表的可变数组的实现和一些基本操作
有兴趣的自己看代码,里面有注释

#include<stdio.h>#include<stdlib.h>                                              #define BLOCK 20typedef 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;}
0 0
原创粉丝点击