C语言用堆和双向链表实现可变长度数组
来源:互联网 发布:淘宝马甲是什么意思啊 编辑:程序博客网 时间:2024/06/07 08:40
最近,我在研究网络程序,突然发现C语言原生数据的一个很要命的问题——必须提前声明使用内存的长度。
当然,C语言的这种要求是符合情理的,毕竟只有定长的变量才能放在函数的栈中。
可是网络上的数据一般不具有预知性,有时很大上百M,有时很小,可能也就几个字节。
于是,我想怎么样才能像其他语言那样实现对数据的不限长度的存取呢?
首先应该使用malloc函数把数据放在堆中。但是问题又来了。
malloc也是需要可以大小的。
于是,我陷入的困惑。终于,想到了大学期间学到的一门无聊的课程——《数据结构》。
先给这个可变长度的数组起个名字:Unfix Array,简称UFA。
UFA应该包含指向第一个UFA_entity和最后一个UFA_entity的指针,最好还有一个指向当前UFA_entity的指针。
每个UFA_entity应该包含前向和后向的指针,还要有一个指向数据的指针。
这样就成了下面这张图:
用C语言来写就是:
struct UFA_entity{ int size; //size of data in this entity void *data; //adress to the data in heap struct UFA_entity *pre; struct UFA_entity *next;};struct UFA_unfixarray{ int count; //number of entity in the array struct UFA_entity *head; // first entity struct UFA_entity *tail; // last entity struct UFA_entity *now; // recent position in the array};
然后就是一些常用的功能函数,用来实现诸如初始化、添加、定位、插入、输出、删除、完全释放等具体的功能。
完成的C代码,可在 http://code.google.com/p/unfix-length-array-for-c/ 下载。
- C语言用堆和双向链表实现可变长度数组
- C语言 可变长度的数组 -2
- C语言0长度数组(可变数组/柔性数组)详解
- C语言:使用链表实现的可变长度字符串处理函数
- c语言实现简单可变数组
- c语言可变数组的实现
- C语言实现链表之双向链表(十二)判断链表是否为空和获取链表长度
- c语言 可变数组
- C语言实现双向链表删除、插入、双向输出
- 双向链表代码实现-C语言
- 双向链表C语言实现
- C语言实现双向链表[上]
- C语言实现双向链表
- c语言双向链表的实现
- C语言实现双向循环链表
- C语言实现双向链表
- 双向链表的C语言实现
- C语言实现双向循环链表
- The Elephant Man——Chapter 6 Outside the Hospital
- MFC框架程序中OnIdle
- 如何正确手工启动Windows下的Oracle RAC数据库
- js页面跳转总结
- 在class文件中读取Tomcat站点的根目录
- C语言用堆和双向链表实现可变长度数组
- Erlang给我们带来什么
- 跟我一起写 Makefile(4) .
- 启动和关闭ADB服务
- oracle merge into用法
- unity3d 鼠标点击或触摸 控制角色对象行走
- 【ubuntu Androiid源码起板子配置】
- Eclipse编码设置
- Linux下串口编程