文本编辑器的数据结构

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(使用前将#替换为@)

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

  • 编码系统按1的个数排序

    我想到了一个编码系统 arr encoded code decoded code 如下 arr是小于 2 16 pow 2 16 的二进制非负整数数组 arr 0 0 each of arr 1 16 有一个 1 1 10 100 1000
  • 将n个元素插入到数组末尾的时间复杂度是多少?

    我知道向数组插入一个元素需要一个恒定的时间 让我们说c 我尝试过的 用于插入n个元素time c c c n times nc 我想问是n的大O还是o 1 是的 添加n元素需要 O n 时间 但添加单个项目则不是 O 1 它是摊销的 O 1
  • C 程序将一棵二叉搜索树复制到另一棵

    所以 在这里我想出了二叉搜索树程序 其中我创建了 2 个二叉树 tmp 和 tmp2 我试图将整个 tmp2 复制到 tmp 该节点作为用户的输入 但我遇到了一些分段错误 而且我也不太确定逻辑是否正确 这是整个程序 请让我知道 t cpy
  • 用于移动物体的空间数据结构?

    我想知道处理大量移动对象 球体 三角形 盒子 点等 的最佳数据结构是什么 我试图回答两个问题 最近邻和碰撞检测 我确实意识到 传统上 像 R 树这样的数据结构用于最近邻查询 Oct Kd BSP 用于处理静态对象或很少移动对象的碰撞检测问题
  • 如何将 PriorityQueue 恢复到方法调用之前的初始状态?

    我正在做一道练习题 这个问题基本上是你传入一个 PriorityQueue 和某个 k 并且你要返回该 PriorityQueue 中的第 k 个最小值 您还可以将 PriorityQueue 恢复到其初始状态 并可以使用一个堆栈或队列作为
  • 如何实现一套?

    我想用C实现一个Set 创建 SET 时可以使用链表吗 还是应该使用其他方法 您通常如何实现自己的集合 如果需要 笔记 如果我使用链表方法 我的 Set 操作可能会遇到以下复杂性 初始化 O 1 销毁 O n 插入 O n 删除 O n 并
  • 如何从 trie 构造 DAWG?

    我只是构建一个trie http en wikipedia org wiki Trie对于一个词汇表 然后我发现有很多分支共享相同的结构 我想将它们组合在一起 结果是DAWG http en wikipedia org wiki Deter
  • 不可变数据结构性能

    我不明白作为一个集合的东西怎么可能是不可变的并且仍然具有可接受的性能 根据我在 F Sets 中读到的内容 内部使用红黑树作为其实现 如果每次我们想要向红黑树添加新内容时 我们基本上都必须重新创建它 那么它如何才能具有良好的性能呢 我在这里
  • 在列表中查找最新版本

    我可以在文件夹中搜索所有版本日志行 但我试图选择列表中的最新版本 但我不知道如何选择 因为列表的元素包含字符和数字 下面是我的代码 用于查找和创建一个名为matched lines的列表 其中包含所有说明日志版本号的行 我希望从创建的列表中
  • 我应该如何存储不同时区事件的数据?

    这是一个概念性问题 因此这里没有代码片段 假设我创建了一个事件数据库 其中一些在纽约 一些在芝加哥 一些在凤凰城 等等 我的服务器的时区设置为纽约 在我看来 为所有这些事件创建 UNIX 时间戳时有两种选择 考虑时区 即 1 月 1 日午夜
  • 理解同构字符串算法

    我理解以下代码来查找字符串是否同构 该代码使用两个哈希值s dict and t dict分别 我假设字符串的长度相同 def isIsomorphic s t s dict t dict for i in range len s if s
  • 修正增量函数的摊余成本

    因此 对于 n 位二进制字符串 A 0 n 1 其中 A 0 是最低有效位 A n 1 是最高有效位 增量算法为 Increment A n i 0 while i
  • 使用 Java 中的映射实现的队列数据结构,大小限制为 5

    我有带有一些记录的地图 我想将该映射限制为仅 5 个元素 并且每当添加新元素时 应删除第一个元素 并应在映射的最后位置添加新元素 类似于 FIFO 的东西 任何人都可以建议我使用一个数据结构或解决方案本身 E g Map
  • 使用 NSMutableDictionary 与 NSMutableArray 造成的性能损失>

    我正在考虑使用 NSMutableDictionary 代替我当前的 NSMutableArray 这主要是出于 KVC KVO 的原因 该集合将在我的绘图方法的内循环中经历严重的变化 如果我继续进行此替换 性能是否会受到重大影响 干杯 道
  • 为什么 .Net 词典中的条目是按加法顺序排列的?

    我刚刚看到这种行为 我对此感到有点惊讶 如果我向字典中添加 3 或 4 个元素 然后执行 For Each 来获取所有键 它们将以我添加的顺序出现 这让我感到惊讶的原因是字典内部应该是一个哈希表 所以我希望事情能以任何顺序出现 按键的哈希排
  • 将非平凡函数应用于 data.table 的有序子集

    Problem 我正在尝试使用我新发现的 data table 功能 永久 来计算一堆数据的频率内容 如下所示 Sample Channel Trial Voltage Class Subject 1 1 1 196 82253 1 1 1
  • 初始化 HashMap 的最佳方法

    我通常会这样做 HashMap
  • 什么时候使用哈希表?

    什么情况下使用哈希表可以提高性能 什么情况下不能 哪些情况不适合使用哈希表 什么情况下使用哈希表可以提高性能 什么情况下不能 如果您有理由关心 请使用哈希表和您正在考虑的其他任何内容来实现 将您的实际数据放入其中 并衡量哪个性能更好 也就是
  • 用惯用的 Scala 更新大型数据结构

    我已经尝试 Scala 一段时间了 并且经常遇到支持不可变数据结构的建议 但是当你有一个像这样的数据结构时3D 场景图 大型神经网络或任何具有大量需要频繁更新的对象的东西 对场景中的对象进行动画处理 训练神经网络 这似乎是 运行时效率极低
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g

随机推荐

  • 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 文本在光标处分成两部分 光标之前的部分放