打印

请各位思维严密的大哥指点一下这个数据表应该怎么查找?

[复制链接]
2365|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjgalaxy|  楼主 | 2009-8-24 16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
12, 12, 79, 12, 12
12, 12,124, 12, 12
12, 21, 12
16, 40, 16
16, 47, 16
17,115, 17
17,130, 17
18, 12, 18,113, 18, 12, 18
18, 12, 18,131, 18, 12, 18
实际的表要比上面这个大一些,长一些,每一行代表一种事件,我这里就姑且让以上这个表代替全部的情况吧;现在我的程序要计算出一组数据(长度就像上面每一行的长度一样不确定),这组数据中的第1个与上面这个表中的每一行的第一个数相匹配,第2个与以上每一行的第二个相匹配......直到匹配成功为止。然后程序不断如此循环。
请问各位大侠,
1.以上这个表我在51程序里面应该怎样表示?是每一行后面补零,补成m行n列的数组呢,还是咋办?
2.我的匹配算法应该怎么写?请各位大哥大姐给指点一下!

相关帖子

沙发
5880527| | 2009-8-24 16:48 | 只看该作者
我觉得后面补零不错,有些时候事情是很繁,但毕竟是电脑去做,就循环而已

使用特权

评论回复
板凳
ccjgalaxy|  楼主 | 2009-8-25 08:57 | 只看该作者
这么快就掉下去了,谢谢楼上的朋友,还请更多的朋友给指点一下!

使用特权

评论回复
地板
FDLock| | 2009-8-25 22:56 | 只看该作者
定义2维数组(每一行后面补零)会浪费不少存储空间。

可以把整个数据表当作一个“文件”来处理,“文件”中的第一行作为一条“记录”,然后逐一查询(匹配)每一条“记录”,直到“文件”结束。
当然,每一条“记录”最前面 要有本条记录的长度(可以自己手工计算和添加,也可以写个VC程序处理一下)。

#define  FILE_NOTE_NO        9        /* 文件的记录数量  */

unsigned char code FILE1_DATA[] = {
5,   12, 12, 79, 12, 12,        // 这是第一条记录,最前面的记录长度5需要自己添加
5,   12, 12,124, 12, 12,        // 这是第二条记录
3,   12, 21, 12,
3,   16, 40, 16,
3,   16, 47, 16,
3,   17,115, 17,
3,   17,130, 17,
7,   18, 12, 18,113, 18, 12, 18,
7,   18, 12, 18,131, 18, 12, 18
};


查询记录时,要历遍整个“文件”的所有记录。
从第1条记录开始,先取出DATA_FILE1组数的第1字节数据,这就是第1条记录的长度。可以先判断记录长度和输入数组的长度是否相同,如果相同再一字节一字节地比较是否相同。如果不匹配,就进入第2条记录。
同样,对于第2条记录,也先判断长度是否相同,再判断数据是否相同......

那如何从第1条记录 找到 第2条记录呢? 实际上只需要得到第1条记录的记录长度,即可找到第2条记录的起始位置......

使用特权

评论回复
5
mohanwei| | 2009-8-26 08:49 | 只看该作者
不要补零,当一维字符串处理,行尾用回车表示,结束才用0。

使用特权

评论回复
6
xwj| | 2009-8-26 09:03 | 只看该作者
4楼的方法不错,省下了链表的空间,查找起来也快


PS:
LZ先得说清楚你的数据是放在哪里的、要不要修改、长度会不会变化、是否要求插入等

使用特权

评论回复
7
HWM| | 2009-8-26 09:21 | 只看该作者
状态机。相关实现方法不少,可以是固定程序(switch-case),固定表格(通用),或链表(关联性较小)。

具体要看你的情况。但不是你所给出的“表格”,那已经是匹配结果了。

使用特权

评论回复
8
ccjgalaxy|  楼主 | 2009-8-26 14:34 | 只看该作者
谢谢以上各位高手!
我的程序计算出一组数据长度随机不确定,但是上面数据表中的某一行,我想放在片外存储区,不用修改也不用插入

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

37

帖子

0

粉丝