- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Editor关键算法设计
Editor关键算法设计 主要内容 编辑器在内存中的处理 编辑器在文件交换中的处理 Editor在内存里的处理情况 在内存中,采用行指针指向块节点的方式处理 系统最大可支持512行的处理容量 存储块采用动态申请方式得到 内存中的关键算法 行插入算法 函数Insertline(char *,long) 行删除算法 函数DeleteLine(long) 内存优化算法 函数Optimize() 插入算法的原则 1、新插入的内容总是在相应的存储块中紧密排列。 2、在存储块中有关于剩余字符空间的纪录,在插入时,依次判断相应的存储块中所剩余的字符空间是否足够,当足够时就进行插入。 3、如果用户所输入的字符串大于127(不含行结束符),系统将自动进行截断,分行插入 4、当所有已存在的存储块都已存满,则在内存中开辟一个新块,并且格式化。将内容写进新块中。 删除算法的原则 一、删除算法包括三部分修改 1、行指针的移动 2、块中实际内容的删除 3、属性数组的修改 二、删除算法结束后,保持块中存储 内容的紧密性 三、如果某个存储块中的内容被删空 则将该存储块释放以获得内存空间 内存优化算法 目的 由于频繁的插入和删除操作,在内存中可能产生较大的空闲。此时,对内存进行优化。 条件 当某个存储块中的字符数不足块容量的%40时进行优化。 方法 内存的优化基于插入和删除操作,根据属性数组找到该块中还剩余的行,取得该行的内容并将其删除,然后间该行的内容插入文本。 文件交换算法 引入目的 在对文件进行处理时,当行数超过512行时,需要引入一种机制,将文件中的制定部分调入内存。 方法 文件交换部分由内存块和两个临时文件组成。调入的内容存放在内存块中,暂时不用的内容放在两个临时文件中。 * * struct Block { char area[512]; char *rear; int charcount; int linecount; }; 存储块的管理 \0 \n S I H T S I T A H W \n K O O B A S I S I H T \n S R Q P L H G F E \n D C B A Linepointer[0] Linepointer[1] Linepointer[2] Linepointer[3] 存储块状态 Blockpointer[0]-rear Blockpointer[0]-area Blockpointer[0]-charcount Blockpointer[0]-linecount \0 \n W E N I L \n S I H T S I T A H W \n K O O B A S I S I H T \n S R Q P L H G F E \n D C B A Linepointer[0] Linepointer[1] Linepointer[2] Linepointer[3] 存储块状态 Blockpointer[0]-area Linepointer[4] Blockpointer[0]-rear Blockpointer[0]-charcount+=串长 linecount+=1 插入内容在内存中的维护 属性数组 …… 2008 2011 1001 1004 1002 3 0 编号规则 属性数字=块号*1000+实际行号 属性信息获取方法 属性数字/1000==块号 属性数字%1000==实际行号 插入算法 … 2008 2011 1001 1004 1002 3 0 … 2008 2011 1012 1001 1004 1002 3 0 行插入前 行插入后 标志着该行的信息已经插入到第二个存储块中,并且该行在内存中的行号是第12行。 \n I L K J I H G \n F E D C \n B A \n 5 4 3 2 1 \n U T S R \n Q P O \n G F \n E D C B A \n Z Y X W V 0 1 2 Lp[0] Lp[1] Lp[2] Lp[3] Lp[4] Lp[5] Lp[6] Lp[7] Lp[8] 插入1行后,内存的情况 … 2007 2006 2005 1002 1003 1 0 4 插入前 插入后 2007 2006 2005 1008 1002 1003 1 0 4 插入时,系统自动寻找空间足够的存储块,并且将插入的内容写存储块中。同时改变属性数组的内容,以维护整个系统中行的顺序以及为下一次插入做准备。 插入算
文档评论(0)