📄 secondchapter.html
字号:
<html><head><meta http-equiv="Content-Type" content="text/html;charset=gb_2312-80">
<title>zpeditor 解说文档</title>
<link href="zpeditor.css" rel="stylesheet" type="text/css">
</head><body>
<div class="qindex"><a class="qindex" href="index.html"> 首页 </a> | <a class="qindex" href="firstChapter.html">
第一章 概况及问题分析</a> | <a class="qindex" href="secondChapter.html">第二章 数据结构</a> |
<a class="qindex" href="thirdChapter.html">第三章 程序模块及功能</a> | <a class="qindex" href="forthChapter.html">
第四章 运行结果与分析</a> | <a class="qindex" href="summarization.html"> 总结与展望 </a>
</div>
<h1>第二章 数据结构</h1>
<ul><li>
<a class="el"><h4>2.1 选用的数据结构</h4></a>
<b> zpeditor所采用的是双向链表。在结构上有两种结点,行结点和列结点。
行结点结构有4个成员,pre指针:指向前一个指针; next指针:指向下一个结
点; num:所在行的列结点个数; rowHead指针:指向列链表的头指针。列结点
结构有3个成员,pre指针:指向前一个指针; next指针:指向下一个结点; ch
:ch为键入的字符数据。另外拷贝时有一个单向链表,每个结点含有多个字符
</b>
<p>
<div class="fragment"><pre>
<span class="comment">
/*the struct of the colum node*/
typedef struct colNode {
char ch;
struct colNode * pre;
struct colNode * next;
} Cnode;
/*the struct of the row node*/
typedef struct rowNode {
int num;
struct colNode * rowHead;
struct rowNode * pre;
struct rowNode * next;
} Rnode;
/*the struct of the buffer node*/
typedef struct bufferNode {
struct bufferNode * next;
char buf[MAXSIZE];
} Bnode;
</span></pre></div>
<p>
<li>
<a class="el"><h4>2.2 选用此数据结构的理由</h4></a>
<ul>
<li>
<a class="el"><h4>1> 优点</h4></a>
<ul><li>
<b>1> 链表操作方便,而文本编辑中插入,删除,拷贝,移动字符,字符串等都是最常使用
功能,它们都是对数据结构的扩大和缩小,这方面链表的效率是比较高的,对于像树这样的
结构就不太适合</b>
<p>
<li>
<b>2> 双向链表有利于光标移动时的定位。
</b><p><li>
<b>3> 链表能够更直观地体现人所看到的,人所想到的文本形式。
</b>
<p></ul>
<a class="el"><h4>2> 缺点</h4></a>
<ul><li>
<b>1> 在空间方面,虽然链表能无限扩展,但指针所占空间也会相应增加,这方面是不如动态数组
,树等结构。</b>
<p>
<li>
<b>2> 在定位方面,像要删除一个结点,要到达光标所指的列结点,就要从链表头或链尾起循环到
指定值或是一直用某个变量跟踪光标位置,这两种做法都是不如动态数组的。</b>
</ul></ul>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -