题目
文本编辑的缓冲区。为文本编辑器的缓冲区设计一种数据类型并实现表1.3.13中的API。
public class Buffer | |
---|---|
Buffer() | 创建一个空缓冲区 |
void insert(char c) | 在光标位置插入一个字符c |
char delete() | 删除并返回光标位置的字符 |
void left(int k) | 将光标向左移动k个位置 |
void right(int k) | 将光标向右移动k个位置 |
int size() | 缓冲区中的字符数量 |
提示:使用两个栈。
思路
建立两个栈,一个左栈,一个右栈,输入时将数据压入左栈,其实光标位置就是左栈的栈头,向左向右移动就是其中一个栈pop()一些元素给另一个栈来模拟光标移动。
代码
package Chap1.$3;
import java.util.Stack;
public class E44
{
Stack<Character> left = new Stack<Character>();
Stack<Character> right = new Stack<Character>();
public int size()
{
return left.size() + right.size();
}
public void insert(char c)
{
left.push(c);
}
public char delete()
{
return left.pop();
}
public void left(int k)
{
if(k>left.size()) return;
for (int i = 0; i < k; i++)
right.push(left.pop());
}
public void right(int k)
{
if(k>right.size()) return;
for (int i = 0; i < k; i++)
left.push(right.pop());
}
public static void main(String[] args)
{
E44 e = new E44();
String str = "photoggrph";
for (int i = 0; i < str.length(); i++)
e.insert(str.charAt(i));
e.left(4);
e.delete();
e.right(2);
e.insert('a');
e.right(2);
for(Character c:e.left)
System.out.print(c+" ");
for(Character c:e.right)
System.out.print(c+" ");
}
}