为了账号安全,请及时绑定邮箱和手机立即绑定

怎么存放一个自增的数组,这个数组会一直增下去

怎么存放一个自增的数组,这个数组会一直增下去

xungeer29 2017-11-02 20:12:04

还有用什么来定义这个数组

查看完整描述

2 回答

已采纳
?
慕用4063026

TA贡献196条经验 获得超117个赞

#include<stdio.h> 

#include<stdlib.h> 

#define BLOCK_SIZE 20 

//

每次

长大

的时候都要去申请新的内存空间,拷贝需要花时间。

 

//may fail in memory restricted situation 

typedefstruct 

 

int *array; 

 

int size; 

} Array; 

//

创建新数组

 

Array array_create(intinit_size) 

 

Array a; 

 

a.array=(int*)malloc(sizeof(int)*init_size); 

 

a.size=init_size; 

 

return a; 

//

释放内存空间

 

void array_free(Array *a) 

 

free(a->array); 

 

a->size=0; 

 

a->array=NULL; 

//

得到当前数组的长度(不见得是元素的个数)

 

intarray_size(const Array *a) 

 

return a->size; 

//

获取该下标下的元素

 

int* array_at(Array *a,int index) 

 

void array_inflate(Array *a,intmore_size);//

函数申明

 

 

if(index>=a->size) 

 

 

 

array_inflate(a,(index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);//** 

 

 

return &(a->array[index]); 

void array_inflate(Array *a,intmore_size) 

 

inti; 

 

int *p=(int *)malloc(sizeof(int)*(a->size+more_size));//** 

 

for(i=0;i<a->size;i++) 

 

 

 

p[i]=a->array[i]; 

 

 

free(a->array);//** 

 

a->array=p;//** 

 

a->size+=more_size; 

intmain(intargc,charconst *argv[]) 

 

Array a=array_create(5); 

 

int j; 

 

for(j=0;j<10;j++) 

 

 

 

*array_at(&a,j)=j+1; 

 

 

for(j=0;j<10;j++) 

 

 

 

printf("%d 

 

",*array_at(&a,j)); 

 

 

printf("\n%d\n",array_size(&a)); 

 

array_free(&a); 

 

return 0; 

//

输出

 

//1 

 

 

 

 

 

 

 

 

 

10 

//20


查看完整回答
1 反对 回复 2017-11-03
  • xungeer29
    xungeer29
    会增加到超出int、string等可储存范围,这时候怎么存储
  • 慕用4063026
    慕用4063026
    首先改成bight可以存2亿,再不行只能转换成文件储存,不然我也想不到还有什么办法
?
元气满满GO

TA贡献93条经验 获得超16个赞

自行设计一个结构,类似栈队列,只是逻辑实现限制

查看完整回答
反对 回复 2017-11-03
  • xungeer29
    xungeer29
    会增加到超出int、string等可储存范围,这时候怎么存储

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信