Upload
adia
View
127
Download
0
Embed Size (px)
DESCRIPTION
Edlin 关键算法设计. 主要内容. 编辑器在内存中的处理 编辑器在文件交换中的处理. Edline 在内存里的处理情况. 在内存中,采用行指针指向块节点的方式处理 系统最大可支持 512 行的处理容量 存储块采用动态申请方式得到. 存储块的管理. struct Block { char area[512]; char *rear; int charcount; int linecount; };. 存储块状态. Blockpointer[0]->area. Linepointer[0] Linepointer[1] - PowerPoint PPT Presentation
Citation preview
Edlin 关键算法设计
主要内容
编辑器在内存中的处理 编辑器在文件交换中的处理
Edline 在内存里的处理情况
在内存中,采用行指针指向块节点的方式处理
系统最大可支持 512 行的处理容量 存储块采用动态申请方式得到
struct Block
{ char area[512];
char *rear;
int charcount;
int linecount;
};
存储块的管理
A B C D \n E F G
H L P Q R S \n T
H I S I S A B O
O K \n W H A T I
S T H I S \n \0
Linepointer[0]
Linepointer[1]
Linepointer[2]
Linepointer[3]
存储块状态
Blockpointer[0]->rear
Blockpointer[0]->area
Blockpointer[0]->charcount Blockpointer[0]->linecount
A B C D \n E F G
H L P Q R S \n T
H I S I S A B O
O K \n W H A T I
S T H I S \n L I
N E W \n \0
Linepointer[0]
Linepointer[1]
Linepointer[2]
Linepointer[3]
存储块状态Blockpointer[0]->area
Linepointer[4]
Blockpointer[0]->rear
Blockpointer[0]->charcount+= 串长 linecount+=1
内存中的关键算法
行插入算法 函数 Insertline(char *,long) 行删除算法 函数 DeleteLine(long) 内存优化算法 函数 Optimize ()
插入算法的原则1 、新插入的内容总是在相应的存储块中紧密排列。2 、在存储块中有关于剩余字符空间的纪录 , 在插入时 , 依次判
断相应的存储块中所剩余的字符空间是否足够 , 当足够时就进行插入。
3 、如果用户所输入的字符串大于 127 (不含行结束符),系统将自动进行截断,分行插入
4 、当所有已存在的存储块都已存满,则在内存中开辟一个新块,并且格式化。将内容写进新块中。
插入内容在内存中的维护属性数组
0 3 1002 1004 1001 2011 2008 ……
编号规则属性数字 = 块号 *1000+ 实际行号属性信息获取方法
属性数字 /1000== 块号
属性数字 %1000== 实际行号
插入算法
0 3 1002 1004 1001 2011 2008 …
0 3 1002 1004 1001 1012 2011 2008 …
行插入前
行插入后
标志着该行的信息已经插入到第二个存储块中,并且该行在内存中的行号是第 12 行。
A B \n C D E
F \n G H I J
K L I \n
O P Q \n R S
T U \n 1 2 3
4 5 \n
V W X Y Z \n
A B C D E \n
F G \n
0
1
2
Lp[0]
Lp[1]
Lp[2]
Lp[3]
Lp[4]
Lp[5]
Lp[6]
Lp[7]
Lp[8]
插入 1 行后,内存的情况
4 0 1 1003 1002 2005 2006 2007 …
插入前
插入后4 0 1 1003 1002 1008 2005 2006 2007
插入时,系统自动寻找空间足够的存储块,并且将插入的内容写存储块中。同时改变属性数组的内容,以维护整个系统中行的顺序以及为下一次插入做准备。
插入算法
删除算法的原则
一、删除算法包括三部分修改 1 、行指针的移动 2 、块中实际内容的删除 3 、属性数组的修改二、删除算法结束后,保持块中存储 内容的紧密性三、如果某个存储块中的内容被删空 则将该存储块释放以获得内存空间
A B \n C D E
F \n G H I J
K L I \n
O P Q \n R S
T U \n 1 2 3
4 5 \n
V W X Y Z \n
A B C D E \n
F G \n
0
1
2
Lp[0]
Lp[1]
Lp[2]
Lp[3]
Lp[4]
Lp[5]
Lp[6]
Lp[7]
Lp[8]
红色部分为待删除的行
A B \n C D E
F \n G H I J
K L I \n
O P Q \n 1 2
3 4 5 \n
V W X Y Z \n
A B C D E \n
F G \n
0
1
2
Lp[0]
Lp[1]
Lp[2]
Lp[2]
Lp[3]
Lp[4]
Lp[5]
Lp[6]
Lp[7]
红色部分为待删除的行
3 0 1 1002 1007 2004 2005 2006 …
删除前
删除后
4 0 1 1003 1002 1008 2005 2006 2007
插入时,系统自动寻找空间足够的存储块,并且将插入的内容写存储块中。同时改变属性数组的内容,以维护整个系统中行的顺序以及为下一次插入做准备。
删除算法
内存优化算法 目的 由于频繁的插入和删除操作,在内存中可能
产生较大的空闲。此时,对内存进行优化。 条件 当某个存储块中的字符数不足块容量的 %4
0 时进行优化。 方法 内存的优化基于插入和删除操作,根据属性
数组找到该块中还剩余的行,取得该行的内容并将其删除,然后间该行的内容插入文本。
A B \n C D E
F \n G H I J
K \n
O P Q \n R S
T \n
V W X Y Z \n
A B C D E \n
F \n
1
2
0
A B \n C D E
F \n G H I J
K \n O P Q \n
V W X Y Z \n
A B C D E \n
F \n R S T \n
1
2
0
释放
文件交换算法 引入目的 在对文件进行处理时,当行数超过
512 行时,需要引入一种机制,将文件中的制定部分调入内存。
方法 文件交换部分由内存块和两个临时
文件组成。调入的内容存放在内存块中,暂时不用的内容放在两个临时文件中。
文件交换的实现
顺序控制数组
int checkfile[2]
存储区域标记数组
long signfile[2][3]
两个文件指针
File *current[2]
关于三个数组Checkfile[3]
数组中存有三个数字 0 , 1 , 2 ,我们约定 0 表示内存区域, 1 表示临时文件一, 2 表示临时文件二。
三个数字的不同排列组合表示真正的源文件在内存中和临时文件中的存储顺序
在引入文件是按照顺序数组中的顺序进行引入。
例如、如果 checkfile[0]=1 checkfile[1]=0
checkfile[2]=2
那么 文件的引入顺序就是临时文件一、内存和临时文件二
关于三个数组Signfile[3][2]
Signfile[0][0] 内存中的一行的物理行号
Signfile[0][1] 内存中存储的行数
Signfile[1][0] 临时文件一中的第一行的物理行号
Signfile[1][1] 临时文件一中存储的行数
Signfile[2][0] 临时文件二中的第一行的物理行号
Signfile[2][1] 临时文件二中存储的行数
关于三个数组Currentfp[2]
Currentfp[0] 指向临时文件一的结尾
Currentfp[1] 指向临时文件二的结尾
引入这三个数组可以在文件交换中保证文件的顺序的正确性和稳定性
下面介绍文件交换的过程
文本状态
Checkfile[0]=1
Checkfile[1]=0
Checkfile[2]=2
Signfile[0][0]=701 Signfile[0][1]=200 Signfile[1][0]=1 Signfile[1][1]=700 Signfile[2][0]=901 Signfile[2][1]=300
M
E
M
O
R
Y
T
E
M
P
2
T
E
M
P
1
701
200
901
1
700
700
901
300
1200
0 1 2
M
E
M
O
R
Y
T
E
M
P
2
T
E
M
P
1200
901
1
700
700
1001
300
1300
0 1 2
701
1001
在当用户进行编辑时,首先在内存中进行处理,如果所处理内容超过内存的处理能力,那么将内存中的内容写入临时文件,然后调入相应的内容进行处理。如果用户要求出里内存中不存在的部分,也根据用户的要求进行交换引入处理。
假设此时用户要求处理第 300 行的内容
200
901
1
500
700
1001
300
1300
0 1
701
300
当用户要求处理第 200 行的内容时,系统准备将第 200 行至第 400 行的内容调入内存区域,即图中所时的蓝色部分
文件交换处理
在处理时,系统首先内存部分的内容追加到临时文件一中,然后清空内存中的纪录
M
E
N
O
R
Y
T
E
M
P
2
Temp1
文件交换处理
系统然后将临时文件二中的内容追加到临时文件一的最后,然后清空临时文件二中的纪录
此时,临时文件一中存有整个文件的信息
M
E
N
O
R
Y
T
E
M
P
2
Temp1
文件交换处理
系统然后将临时文件一中的前 300 行的内容写到临时文件二中,然后删除临时文件一中前 300 行的纪录
M
E
N
O
R
Y
T
E
M
P
2
Temp1
文件交换处理
系统然后将临时文件一中的前 200 行的内容写到内存中,然后删除临时文件一中前 200 行的纪录
交换结束
M
E
N
O
R
Y
T
E
M
P
2
Temp1
下一步 总结对听众的要求 总结您要进行的工作