data-structures - 文本编辑器的数据结构

标签 data-structures text-editor

这是一个面试问题。您将使用什么数据结构来存储文本编辑器中的文本?

最佳答案

在优秀的旧 ZX-Spectrum 上,一个(或多个,我不知道)文本编辑器使用了非常简单的结构。

有一个大缓冲区,占用了所有可用 RAM。文本在光标处分成两部分。光标之前的部分放置在缓冲区的开头,其余部分放置在缓冲区的末尾。当输入文本时,数据只是添加到第一部分的末尾,当光标移动时,文本会被来回复制。

缓冲区布局:

Hello, World!
        ^------Cursor here

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|H|e|l|l|o|,| |W| <free>  |o|r|l|d|!|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                ^         ^        |
begin           cur1      cur2    end

这就是一些编辑操作的完成方式:

Type a char:    buffer[cur1++] = character

Backspace:      cur1--

Cursor left:    buffer[--cur2] = buffer[--cur1]

Cursor right:   buffer[cur1++] = buffer[cur2++]

正在运行的缓冲区:

             Hello, W..............orld!
Press right          ^             ^
             Hello, Wo..............rld!
Press backspace       ^             ^
             Hello, W...............rld!
Press 0              ^              ^
             Hello, W0..............rld!
                      ^             ^

关于data-structures - 文本编辑器的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4199694/

相关文章:

c# - C# 中的多键字典(另一种)?

algorithm - 分层多部分键值存储

linux - 更改 vim 快捷方式

c++ - 使用 C++ 字符串函数自动替换 s​​printf 函数

data-structures - 双链队列比单链队列有什么优势吗?

Javascript : where are high level data structures?

algorithm - 一次从平衡二叉树中删除多个项目

emacs - 在邪恶中为正常模式重新绑定(bind)数字

eclipse - 在 Eclipse 的文本编辑器中,是否可以让制表符看起来与空格不同