本帖最后由 linux_c_py_php 于 2012-09-20 12:30 编辑
数据量: 100 * 4 = 400B.
内存量: 128B
磁盘量: 1MB
个人方案:
以数值为文件名, 在目录下建立对应文件即可.
例如: 有[1, 2, 3, 4]四个数字, 那么目录下存储1, 2, 3, 4为名字的四个文件即可.
查询操作: O(1), stat/access看是否存在对应名称的文件即可.
插入操作: O(1), creat建立对应文件即可.
删除操作: O(1), unlink删除对应文件即可.
----------------------------------------------------
至于楼主的需求, 说数据要在1M文件中, 也有方案(可以做成默认递增的, 也可以任意插入):
1, 文件按sizeof(int)分block, 预先开好100~200个block的大小(lseek + write(1)), 第一个block用来记录数据个数.
2, 查找:O(n), 因为没法一下装入内存中二分, 所以遍历即可 , 每次fread 4B.
3, 插入:O(n), lseek偏移到想插入的block, 循环逐个block向后挪动4字节, 将新数值写到当前block.
4, 删除:O(n), 一样, 不说了.
总之, 内存里始终只需要4B空间. |