QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1594|回复: 19

讨论一下 一个数据组织的问题

[复制链接]
发表于 2003-8-11 11:31:59 | 显示全部楼层 |阅读模式
我在写一个字符界面下的编辑器
文件内容一开始是考虑这么存放的
每行一个指针和长度(也就是说可以超出屏幕的大小的)每页就这么n个指针的数组来维护
然后指向的内容是一个统一的缓冲 也就是比如第一行指向file_buffer+0
那么第二行指向的就是file_buffer+line_xcontent[0].length
现在发现这实在是一个无比之烂的设计方案
因为在insert模式下我要移动后面的内容
但是我又发现 无论如何 一页的缓冲都会有这个移动后续内容的问题 除非我每一行的缓冲各自分配 可以减少一下这种问题
(这可是被我一开始否定的方案啊~~~~)
关于这个后续内容移动的问题 各位有什么好点子么?
发表于 2003-8-11 12:09:58 | 显示全部楼层
一页用一个指针数组就可以,为什么要用n个?
回复

使用道具 举报

 楼主| 发表于 2003-8-11 12:33:04 | 显示全部楼层
我写的是:n个指针的数组
莫非我的语文水平有升高??
回复

使用道具 举报

发表于 2003-8-11 12:41:03 | 显示全部楼层
:-)
回复

使用道具 举报

 楼主| 发表于 2003-8-13 09:05:39 | 显示全部楼层
顶一下 都没什么可说的啦?
回复

使用道具 举报

发表于 2003-8-21 13:33:40 | 显示全部楼层
我的意见:
首先~按照屏幕上显示的行定义一个结构体,具体如下:
typedef struct tag_line
{
        char content[81];/*每行显示的数目+1(最后要有一个NULL,所以当然要+1了~*/
        struct tag_line *next_line;/*下一行*/
}line;
每一个这种结构体并不是真正意义上的一行,而是显示器上,显示的一行。
如果要对行进行操作,那么只要搜索每个节点中,是否存在'\n'就可以了,(我表达能力比较差……据个例子吧)
要删除一行,那么就从这行的开头搜索它以后(包括它)的每个结构体,直到搜索到某个结构体中的content成员里面是否含有'\n'就可以了~找到之后,把从头(这个头你应该知道了~)开始到这个节点的所有节点删除——链表操作~呵呵~你应该比我熟悉~
嗯……不知道我这么说你听懂没有(偶的表达能力比较差的说~)
个人意见~仅供参考~
回复

使用道具 举报

 楼主| 发表于 2003-8-21 14:28:42 | 显示全部楼层
泪...终于有人回了啊......
不过提一句 这样的结构就不能支持屏幕的左右移动了啊 字符如果一行放不下就只能到下一行 这样产生的文件的每行长度是根据屏幕宽度来的 这样好像...
回复

使用道具 举报

发表于 2003-8-21 14:58:22 | 显示全部楼层
哦~原来是想左右移动啊……晕…………我觉得左右移动不如不移动啊~我还是很喜欢vi那种方式的~
嗯……我再想想看啊~
回复

使用道具 举报

发表于 2003-8-22 09:57:20 | 显示全部楼层
我的意见:
定义两个结构体:
typedef struct tag_word
{
        char words[81];
        struct tag_word *next;
}word;

typedef struct tag_line
{
        word *content;
        struct tag_line next;
}line;
这个不用我说了吧~具体的组织结构如下:
[code:1]
+--------+         +----------+         +----------+
|   line  |------>|   word   |------> |    word  |------->...
+--------+         +----------+         +----------+
   |
+--------+         +----------+
|   line  |------>|   word   |------>...
+--------+         +----------+
   |
   .
   .
   .
[/code:1]
T.T……这该死的图……累死我了………………
回复

使用道具 举报

发表于 2003-8-22 10:23:20 | 显示全部楼层
啊~~~~~~~~~~~我那张靓图怎么成这个样子了~~~~55555~~
之所以不用指针而用结构体,我是这么觉得的:
指针用之前总要malloc吧~但是又不能确定一行有多少,所以自然不能确定malloc多少字节,要是不听realloc呢……又有点……
所以我觉得还是用结构比较好~~每一个line结构是一行,要删除一行就是链表操作,不用我说了吧~
回复

使用道具 举报

 楼主| 发表于 2003-8-22 10:32:20 | 显示全部楼层
不错 不过81个字节单元太大了 如果32个字节做一个单元 每次插入的消耗最多是分配32+大小的单元和拷贝
先看看实现起来是不是容易 不过最近工作多多啊 郁闷
回复

使用道具 举报

发表于 2003-8-22 11:01:44 | 显示全部楼层
呵呵~偶是数了一下,每一屏幕一行显示的字符数是80个加上一个NULL,一共81~要是像想改变也不是不可以啊~我觉得实现起来可以用类的~这样会方便些~
回复

使用道具 举报

发表于 2003-8-22 17:14:28 | 显示全部楼层
[quote:deac6428a4="默难"]啊~~~~~~~~~~~我那张靓图怎么成这个样子了~~~~55555~~
之所以不用指针而用结构体,我是这么觉得的:
指针用之前总要malloc吧~但是又不能确定一行有多少,所以自然不能确定malloc多少字节,要是不听realloc呢……又有点……
所以我觉得还是用结构比较好~~每一个line结构是一行,要删除一行就是链表操作,不用我说了吧~[/quote]

以后有这种图就当作代码来发~
回复

使用道具 举报

发表于 2003-8-22 19:00:39 | 显示全部楼层
晕…………忘了忘了~多谢提醒多谢提醒~~
回复

使用道具 举报

 楼主| 发表于 2003-8-24 09:06:11 | 显示全部楼层
发现在坐标定位到缓冲中的工作增加不少 有得必有失阿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 06:01 , Processed in 0.055702 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表