《c语言变长数组.docx》由会员分享,可在线阅读,更多相关《c语言变长数组.docx(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、c语言变长数组c语变长(动态)数组ArrayList关于变长(动态)数组 ArrayList缘起在c语的程序设计中,想要实现对个数组的长度的动态变化其实是较困难的,并且也是低效且不尽实的。但是看到别在做arraylist时,我决定将课上所学习的变长数组放上来。另,正是由于变长数组的缺点使得我们可以引链表的学习。代码h件中的代码样例#ifndef _ARRAY_H_#define _ARRAY_H_typedef struct。int*array;int size; Array;Array array_create(int init_size);void array_free(Array *a)
2、;int array_size(const Array *a);int*array_at(Array *a,int index);void array_inflate(Array *a,int more_size);#endif/* _h */c件中的代码样例#include变长数组.h#include#include#define BLOCK_SIZE 20/typedef struct/。/ int *array;/ int size;/ Array;Array array_create(int init_size)。Array a;a.size = init_size;a.array =
3、(int*)malloc(sizeof(int)* a.size);return a;void array_free(Array *a)。free(a-array);a-array =NULL;a-size =0;int array_size(const Array *a)。return a-size;int*array_at(Array *a,int index)。if(index = a-size)array_inflate(a,(index / BLOCK_SIZE +1)* BLOCK_SIZE - a-size);return&(a-arrayindex);void array_in
4、flate(Array *a,int more_size)。int*p =(int*)malloc(sizeof(int)*(a-size + more_size);for(int i =0; i size;+i)。pi= a-arrayi;free(a-array);a-array =NULL;a-size += more_size;缺点分析1、变长在进较的数组进变长时,每次需要新建个更的数组(长度增为 (index / BLOCK_SIZE + 1) * BLOCK_SIZE ,但是每次都需要进拷贝操作,将原数组拷贝给更长的新数组然后释放原数组的内存。当变长操作需要多次重复的进时,变长数组的式效率会降低。2、内存假设我们能使的内存是有定的限制的,使变长数组的式时,每次在原数组的后新开个更长的数组(若前的已经被释放出的内存够会在前开)当数组长度常的时候,可能会因为前的长度不够新开增长的数组,后的内存不够,所以导致程序崩溃。也就是说,使变长数组的式进储存,其实只能利好所分配的内存的约三分之,这当然是种既舍弃空间缺乏时间的处理式。结语由此,我们引了链表这种数据结构。