文件结构:

  • ArrayList.h:头文件
  • ArrayList.c:实现头文件中的功能
  • ArrayListTest.c:测试

ArrayList.h

头文件的基本框架:

#ifndef _ARRAYLIST_H
#define _ARRAYLIST_H
// 头文件体
#endif

头文件中应包含结构体定义,必要的宏定义,需要直接在其他文件中使用的函数的定义

Java中的ArrayList是实现引用的数组,而不是对象的数组,在连续的存储空间中存放的是引用,而不是对象实体,所以在实现的时候采用void**,那么这样实现的ArrayList将可以含有任意类型的变量,坏处就是需要在使用的时候人为的解析

capacity是当前item_list申请的长度

my_size是当前item_list中存放了多少个元素。之所以不用size是为了和接下来实现的size函数区别

为实现通过结构体通过调用成员的方式调用函数,而不是直接通过函数名调用函数。在结构体中声明函数指针用以调用函数。这样就可以在ArrayList.c中将函数的作用域声明为只有本文件可见,避免和其他库函数函数名冲突。但是因为结构体中包含这个文件中函数的指针,仍然可以调用函数。

typedef struct ArrayList ArrayList;
struct ArrayList{
void** item_list;
int capacity;
int my_size; // 函数指针
}

为实现函数指针的赋值,需要声明初始化函数,在初始化函数中将函数指针赋值,所以这两个函数就不能放到结构体中:

// create a new ArrayList
int init_ArrayList(ArrayList*);
// create a new ArrayList with specified capacity
int init_ArrayList_capacity(ArrayList*,int capacity);

ArrayList.c

包含头文件,实现函数

因为这些函数无法知道是哪个结构体调用自己的,所以都需要将调用的结构体传进去

ArrayListTest.c

包含头文件

调用的方式类似:

al.retainAll(&al,aap+3,11);
al.trimToSize(&al);

源码地址:

https://github.com/biaoJM/C-Wheel-ArrayList

最新文章

  1. 原创 C++作用域 (二)
  2. Android开发学习——android存储
  3. Power BI for Office 365(一)移动端应用
  4. hdu 5427 A problem of sorting
  5. input text 字体的影响
  6. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊 動態樹
  7. js中setTimeout/setInterval定时器用法示例
  8. osg添加纹理示例
  9. hdu1573X问题(不互素的中国剩余定理)
  10. python进阶1--数据库支持
  11. Linux应用环境实战05:在Ubuntu 14.10中借用Windows的字体 (转)
  12. Bootstrap Paginator分页插件
  13. 剑指offer替换空格
  14. Mac OS10.11更新ruby,gem,安装cocoapods
  15. jquery deferred done then区别
  16. [BZOJ4008]亚瑟王
  17. SQL Server的case when用法
  18. QT连接postgreSQL
  19. redis安全问题【原】
  20. LOJ #10130 点的距离

热门文章

  1. mongodb配置文件详解
  2. why updating the Real DOM is slow, what is Virtaul DOM, and how updating Virtual DOM increase the performance?
  3. 查看Linux系统信息命令
  4. Lapack下载安装
  5. Python破解Wifi密码思路
  6. hive初体验
  7. webpack加载器(Loaders)
  8. Application Loader提交ipa文件出现ERROR ITMS-90022问题解决方式
  9. glove入门实战
  10. java基础之get和post的差别