文本编辑器的数据结构

2024-03-04

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


在老式的 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!
                      ^             ^
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文本编辑器的数据结构 的相关文章

  • 从日志文件中获取前 100 个 URL

    我的一位朋友在接受采访时被问到以下问题 谁能告诉我如何解决它 我们有一个相当大的日志文件 大约 5GB 日志文件的每一行都包含一个用户在我们网站上访问过的 URL 我们想要找出用户访问最多的 100 个 URL 怎么做 如果我们有超过 10
  • Chrome 版本 58 的 Redactor 编辑器文本格式问题

    我们正在使用编辑器 https imperavi com redactor https imperavi com redactor 版本 10 1 1 并且由于对项目的大量依赖而未迁移到 Redactor II 最近 我们在 Chrome
  • 如何有效地找到距给定点最远的点(从一组点中)?

    我正在寻找一种算法或数据结构来解决以下问题 给你一组点 S 然后你会得到另一个点形式的 Q 查询 对于每个查询 找到集合中距离给定点最远的点 集合中最多有 10 5 个点和 10 5 个查询 所有点的坐标都在 0 到 10 5 范围内 我想
  • 解释这段代码的工作原理;子进程如何返回值以及在哪里返回值?

    我不明白子进程如何返回该值以及返回给谁 输出为 6 7 问题来源 http www cs utexas edu mwalfish classes s11 cs372h hw sol1 html http www cs utexas edu
  • 生成二叉树的所有从根到叶的分支

    抱歉 如果这是一个常见问题 但我还没有找到适合我的特定问题的答案 我正在尝试实施一个walk方法将二叉树从根节点遍历到每个叶节点 每当到达叶节点时都会生成根到叶路径 例如 遍历表示为的二叉树 a b d c 会产生 a b c a d 我的
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 为什么 Nil 会增加一个枚举大小而不增加另一个枚举大小? Rust 枚举的内存是如何分配的?

    如果我定义以下枚举 Nil 不会增加枚举的大小 use std mem size of enum Foo Cons char enum Bar Cons char Nil println size of
  • 我是否需要采取明确的操作来促进与持久数据结构的共享?

    我来自命令式背景 正在尝试实现一个简单的不相交集 并集查找 数据结构 以获得在 Haskell 中创建和修改 持久 数据结构的一些练习 目标是有一个简单的实现 但我也关心效率 我的问题与此相关 首先 我创建了一个按等级并集的不相交集森林实现
  • 查找其索引的乘积可被另一个数字 X 整除的对的数​​量

    给定一个数组和某个值 X 找到满足以下条件的对的数量 i lt j a i a j and i j X 0 Array size lt 10 5 我想这个问题有一段时间了 但只能想出蛮力解决方案 通过检查所有对 这显然会超时 O N 2 t
  • 迭代和遍历有什么区别?

    过去几周我一直在学习迭代器 我仍然不明白迭代链接列表和遍历链接列表之间的主要区别 我知道遍历意味着遍历 访问每个元素 链接列表 并且在迭代时基本上做同样的事情 但是有什么不同 为什么不能遍历所有内容 标准库数据结构 遍历 只是意味着遍历数据
  • 如何将列表转换为地图?

    最近我和一位同事讨论了转换的最佳方式是什么List to Map在 Java 中 这样做是否有任何具体的好处 我想知道最佳的转换方法 如果有人可以指导我 我将非常感激 这是个好方法吗 List
  • Scheme (Lisp) 中树的深度反转

    我对Scheme中的基本树数据结构进行了深度逆向 define deep reverse t cond null t not pair t t else cons deep reverse cdr t deep reverse car t
  • Java:避免在数组列表中插入重复项

    我是java新手 我有一个ArrayList我想避免插入时重复 我的ArrayList is ArrayList
  • 某些数据结构是否比其他数据结构更适合函数式编程?

    In 现实世界哈斯克尔 http book realworldhaskell org 有一个标题为 没有数组或哈希表的生活 的部分 其中作者建议在函数式编程中首选列表和树 而在命令式程序中可能会使用数组或哈希表 这是有道理的 因为在创建新列
  • 计算机如何评估巨大的数字?

    例如 如果我输入一个值 1234567 98787878 Wolfram Alpha 可以为我提供许多细节 这包括小数近似 总长度 最后一位数字等等 您如何评估如此大的数字 据我了解 编程语言必须具有特殊的数据类型才能存储数字 更不用说将其
  • 链表算法查找总和为 10 的对

    您能否建议一种算法来查找链表中加起来为 10 的所有节点对 我想出了以下内容 算法 比较每个节点 从第二个节点开始 每个节点从头节点开始直到前一个节点 在当前比较的节点之前 并报告所有此类对 我认为这个算法应该可以工作 但是它肯定不是最有效
  • 一棵全黑节点的树是红黑树吗?

    看来wiki上的定义并不准确 http en wikipedia org wiki Red black tree Properties http en wikipedia org wiki Red black tree Properties
  • 我可以使用什么数据结构来查找给定姓名的人的电话号码?

    我可以使用什么数据结构来查找给定姓名的人的电话号码 假设您只会使用人名进行查询 那么最好的选择是使用关联数据结构 这基本上是一种数据结构 通常实现为哈希表或平衡二叉搜索树 将数据存储为键 gt 值 或者 换句话说 作为 键 值 对 您使用键
  • JAVA实现AVL树

    我想用Java实现一个AVL树 这是我到目前为止所拥有的 public class AVLNode private int size The size of the tree private int height The height of
  • 修订:算法和数据结构

    我需要通过修订来构建和处理数据的想法 例如 我有一个对象数据库 例如汽车 每个对象都有许多属性 这些属性可以是任意的 因此没有一个固定的模式来描述这些对象 这些对象可能保存为键值对 现在我需要更改对象的属性 我不想完全重写它 我希望能够返回

随机推荐

  • PHP imagejpeg 保存文件不起作用

    我有 php 代码来修剪白色外边框并调整大小 当我使用 imagejpeg newImage 将其输出到浏览器时 它工作正常 但是当我尝试使用 imagejpeg newImage test jpg 保存时 它不会保存在任何地方 请帮助 i
  • 在 Sqlcmd 中转义特殊符号

    我有一个 bat 文件 当我安装应用程序时 它会执行一堆 sql 脚本 在安装对话框中 用户设置数据库名称 登录名和密码 然后在此 bat 文件中使用它们 这里是 SET server local SET db dbname SET use
  • 谷歌云实例在关闭浏览器后终止

    我有一个 bash 脚本 我想在谷歌云服务器上连续运行它 我通过浏览器中的 SSH 连接到我的虚拟机 但关闭浏览器后 脚本停止了 我尝试使用 Cloud Shell 但如果重新启动笔记本电脑 脚本会从头启动 它不能连续工作 是否可以在谷歌云
  • 删除多维数组中的父键

    我想从数组中删除键 Properties 如下所示 我有 Array Values gt 1 List gt Array Product gt Array Details gt Array Properties gt Array Id gt
  • Java中如何设置鼠标的位置?

    我正在使用 Java 进行一些 Swing GUI 工作 我认为我的问题相当简单 如何设置鼠标的位置 正如其他人所说 这可以通过使用来实现Robot mouseMove x y http java sun com javase 6 docs
  • VS2008 PDB 文件大小限制还原:LNK1201 也是

    VS2k8 中 PDB 文件的大小限制是多少 我在一个开发工作站上 32 位 PAE 内核上的 RAM 和页面文件各为 3GB 但在 PDB 增长超过 1GB 后不久 链接器就抛出了 LNK1201 错误 MSPDBSRV 是否只是耗尽了地
  • 正则表达式提取文件名

    我有一个纯文本网络响应 需要提取文件名 对于好的正则表达式有什么建议吗 Total parts 1 Name file Content Type text plain Size 1167 content type text plain co
  • 有没有办法设置 HTML5 范围控件的样式?

    有没有办法设置 HTML5 范围控件的样式 是否可以更改滑块滑动的线条的颜色 事实证明 webkit中有 input type range webkit appearance none important input type range
  • 无法匹配 C 中的正则表达式

    我对以下正则表达式有问题 prefix w w s 0 9 1 4 s s 0 9 1 4 s s 0 9 1 4 s w 匹配字符串如下 prefix string string 100 100 0 string 我无法在我的 C 代码中
  • 多个表上的 FreeText COUNT 查询超级慢

    我有两张桌子 Product ID Name SKU Brand ID Name 产品表大约有120K条记录 品牌表有30K条记录 我需要查找名称和品牌与特定关键字匹配的所有产品的数量 我使用自由文本 包含 如下所示 SELECT coun
  • 验证、方法执行和JIT编译过程中类加载的原因和跟踪

    我试图非常详细地了解哪些事件会导致类加载 并且在测试过程中 我在这个非常基本的示例中遇到了一种我不理解的行为 public class ClinitTest public static Integer num public static L
  • Emacs:是否可以列出 dired 中标记文件的某个查询字符串的所有匹配行?

    前几天我发现 M x 发生了 Emacs中如何实现代码折叠效果 https stackoverflow com questions 1085170 how to achieve code folding effects in emacs 我
  • 转换为 Vector' aria-label='无法将类型 转换为 Vector'> 无法将类型 转换为 Vector

    给定我的 pyspark Row 对象 gt gt gt row Row clicked 0 features SparseVector 7 0 1 0 3 1 0 6 0 752 gt gt gt row clicked 0 gt gt
  • 无法在l5-swagger中生成API文档

    我开始学习招摇了 我正在尝试做书上所做的同样的事情 使用 Angular 6 和 Laravel 5 进行全栈 Web 开发实践 输入命令后使用 php fpm bash php artisan l5 swagger generate 我在
  • jQuery .when().done() 不工作

    首先我想说我是 jQuery 的新手 我怀疑我只是做了一些愚蠢的事情 所以希望这对某人来说会很简单 我正在尝试向我的网站添加滑动移动子菜单 我想要一种手风琴效果 如果我单击一个父链接 它的子子菜单将打开 所有其他子菜单将关闭 问题在于时间
  • Console.ReadLine() 在 VS Code 中不起作用,用 C# 编写代码

    我正在学习 C 并且正在使用 VS Code 当我尝试使用 Console ReadLine 从用户那里获取输入时 它不起作用 我从一个视频中提到了它 它做了完全相同的事情 但经过几次谷歌搜索后 我仍然不知道我哪里出了问题 Console
  • 将 ROW_NUMBER 列添加到流数据帧

    我对 Spark 和 SQL 还很陌生 我正在尝试向我的 df 添加一列 然后将其保存到 Delta 表 该列为每个记录 行提供唯一的 id 并在每次更新特定记录时递增它 我试图执行以下操作 SELECT etc CONCAT somero
  • 类型错误:列表索引必须是整数或切片,而不是列表

    数组 某种具有 3 列和无限数量的行且其中包含数据的列表 Volume array 0 2 counter 0 for i in array if Volume array i 2 lt why is this line a problem
  • 哪些 GOF 设计模式具有完全不同的实现(java 与 Scala)

    最近我读到以下问题 在 Scala 中是否有使用访问者模式的用例 我是否应该在每次使用 Scala 时都使用模式匹配 Java 中的访问者模式 标题问题的链接 Scala 中的访问者模式 https stackoverflow com qu
  • 文本编辑器的数据结构

    这是一道面试题 您将使用什么数据结构来存储文本编辑器中的文本 在老式的 ZX Spectrum 上 一个 或多个 我不知道 文本编辑器使用了非常简单的结构 有一个很大的缓冲区 占用了所有空闲 RAM 文本在光标处分成两部分 光标之前的部分放