拜求:c/c++算法作业谁能给指导下,谢谢

zlnlh 2012-05-31 09:16:09
1.数据文件
- 记录的结构 (每个记录的SIZE = 80 byte) // 编译时确认记录的大小!
struct book {
int serial; // 图书号: 1 ~ 200,000,000
char name[20]; // 书名
char author[20]; // 作者: 1人
char publisher[20]; // 出版社
int date; // 出版年度
double price; // 价格
};
- block 结构 (block size = 4096 byte)
struct d_block {
struct book record[51];
int rec_num; // 储存记录数
long next; // 下一个记录开始 offset
long previous; // 上一个记录开始 offset
char fill[56]; // 增加的block情报储存
};
2. 索引结构 (B+ 树文件)
- block结构 (block size = 4096 byte)
struct i_block {
int type; // Leaf block: 0, Otherwise: 1
int key_num; // 储存key的个数
union {
struct { // Non-leaf block
int key[510]; // 图书号排序
long child[511]; // child block开始 offset
int dummy; // 增加的block情报储存
} nl;
struct { // Leaf block
int key[408]; //图书号排序
long data[408]; // 数据block开始 offset
short index[408]; // 数据block内 record[] 排序 index (0 ~ 52)
long next; // 下一个leaf block开始 offset
long previous; //上一个leaf block开始offset
} lf;
} u;
};

需要的项目
1. ① dump input (40分)
- file name? data.txt // 从输入文件名开始
- data.txt 文件内储存 (serial, name, author, publisher, date, price) 数据读入存入library.dat文件。(记录数不超过1000)
- data.txt: ASCII 文件,每个记录一行
- library.dat 文件结构:
• struct d_block 每个block里边储存51个记录,用link连接
• 图书记录的txt文件按顺序存入dat文件
- dump input完成后内容:
• library.dat 输出block数(储存为X)
• library.dat 文件储存的记录数(图书数量)
• dump input输出运行时间(library.dat开始储存到所有记录储存结束的时间)
② 输出block内容
- 输入block 号码? (只能输入 0 ~ X-1)
→ 输出存入此block的内容 (排序索引: 书号,书名,作者,日期,价格)
- 无法输出内容第一步算没做出来
③ B+ 树leaf节点生成 (50分)
- library.dat 对于文件内储存所有的记录<serial, (d_block 号码, 排序索引)>
提取出来在i_block.lf内 内部排序,排完序存储为 library.tmp
- serial用地增派需整理为 library.idx 文件储存
• library.idx 文件内leaf节点从一开始顺序储存
• block 0内设定为储存根节点
- 每个 i_block用link双重连接(next和previous)
- leaf节点生成后输出内容
• library.idx 文件block数
• library.dat 文件储存所有内容 <serial, (d_block 号, 排序索引)>
• leaf节点生成所需时间
④ 输出索引block内容
- 输入block号码?
→ 输出此block储存的所有内容 (图书号码, d_block 号码, 排序索引)
- 索引block内容无法输出第三步算没做出来
⑤ B+ tree的 index set 生成 (50分)
- 知道leaf节点block数,index set的级数与各级包含的index block数可以计算
- 根节点library.idx 文件block 0(offset 0)内储存, 剩下的节点在 library.idx文件最后顺序储存
- 输出内容: 根节点内容和index set生成后输出所需时间
⑥ 关于index set ④和 同一索引block内容不用输出,没输出4和6不占分数。
⑦ 单一记录查找 (20分)
- 记录号? (图书号输入)
- B+ 树文件内输出图书号查找 (记录内内容)输出和记录包括的leaf block地址一起输出
⑧ 负数个记录查找 (20分)
- 记录号? (图书号)
- 图书号码正数时,输出比此图书号码大或等于的所有图书信息
- 图书号码为负数时,计算图书的绝对值,输出比此图书绝对值小的所有图书信息
⑨ 输入记录 (30分)
- 录入新图书 (도서 번호, 도서 이름, 저자, 출판사, 출판년도, 가격),在
library.dat 文件最后的block内储存
- 储存的图书(图书号, d_block 号, 排序索引) B+ 树索引储存
- 录入后, 可以用⑦ 来查找
(10) 记录删除 (30分)
- 记录号码? 输入图书号
- 在library.dat 文件和 library.idx 文件内 删除
- 完成后, 在使用⑦时输出此记录已被删除
...全文
36 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧