C语言动态数组实现课堂笔记:特性与实现步骤.pdfVIP

  • 0
  • 0
  • 约2.24千字
  • 约 4页
  • 2026-01-20 发布于北京
  • 举报

C语言动态数组实现课堂笔记:特性与实现步骤.pdf

第十二讲C语言动态数组实现

1:动态,数组

动态指的是的容量可以动态的变化,普通的数组,它的

容量是不能动态变换。随着我们的数据的增多,我们动态的

变化而变化,如果我们没有办法这么多数据了,那么就动态

的增加。

数组:特点,就是这些元素是一次按照顺序统一排列,我

只需要一个下标就可以马问的到元素。例如inta[100],从

低到高顺序排列的的时候a[3];

缺点?

1:加入我要在中间(删除)移动其它的元素;

2:一旦类型定义好了以后,就不能变了;

2:分析它的需求

1:动态数组,要能任何类型的元素(使用的时候决定你存

储的是哪一种)

2:动态的扩大,10个数据,100个数据;

3:通过一个下标,能里面的每一个元素

4:增加一个元素,删除一个元素;

5:将所有的元素都清空,但是不释放内存。

6:将所有的元素都清空,同时释放内存;

7:支持数据最后;

8:支持弹出最后一个数据;

9:支持将数据最前面。

10:支持弹出最前面的一个数据;

11:支持返回动态数组的元素个数;

3:动态数组的内存在某一个时刻也是固定的,当随着我们的元素

不断的增加的时候,如果我们现在的内存,没有办法存放这些元

素,那么我们就从新分配内存,将原来的内存数据,拷贝到新的

内存数据这里;

4:step1预先分配一段内存malloc,例如是8个元素的内存。

Step2每次往里面添加的时候,可用元素的个数越来越

少。

Step3:如果当我这个8个元素都存满了以后,又扩容

一部分(8个元素,可以存放16个元素),那么就借助我们的

realloc函数;

Step4:当我们又存放满了的时候,我们又扩充8个元素,24

个元素依次类推;

5:为什么是unsignedchar*,因为我们里面存放的是任何类型

都可以存放,所以,我们是通过一个地址+元素的带下内存表

示一个元素的,sizoef_elem,当我们要跳到下一个元素完美怎

么办,data_ptr+sizeof_elem跳动到下一个的地址。

6:动态数组它不管里面存放的元素,它,哪个元素

从那个地址开始存放的,然后占的内存字节就可以了;

#includestdio.h

#includestdlib.h

#includestring.h

#includet_vector.h

//#includevector_array.h

structpoint{

floatx;//4个字节

floaty;//4个字节,8个字节

};

intmain(intargc,char**

argv){structvectorv;

vector_define(v,sizeof(structpoint));

structpointpt;

pt.x=10;

pt.y=10;

//就是将pt里面的数据,存放到我们的动态数组里面;

vector_push_back(v,pt);

intsize=vector_size(v);

printf(size=%d\n,size);

for(inti=0;isize;i++){

structpoint*p=(structpoint*)vector_at(v,i);

printf(%f,%f\n,p-x,p-y);

}

structpoint*ptr=vect

文档评论(0)

1亿VIP精品文档

相关文档