• Algs4-1.3.44文本编辑器的缓冲区


    1.3.44文本编辑器的缓冲区。为文本编辑器的缓冲区设计一种数据类型并实现表1.3.13中的API.
    表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()//缓冲区中的字符数量
    提示:使用两个栈。
    答:

    图片

    图片


    public class Buffer
    {
        private Stack<Character> stackMain;
        private Stack<Character> stackAssist;
        public Buffer()
        {
            stackMain=new Stack<Character>();
            stackAssist=new Stack<Character>();
        }
       
        public void insert(char c)
        {
            stackMain.push(c);
        }
       
        public char delete()
        {
            return stackMain.pop();
        }
       
        public void left(int k)
        {
            while(k>0)
            {
                stackAssist.push(stackMain.pop());
                k--;
            }
        }
       
        public void right(int k)
        {
            while(k>0)
            {
               stackMain.push(stackAssist.pop());
               k--;
            }
        }
       
        public int size()
        {
            return stackMain.size()+stackAssist.size();
        }
       
        public void showSize()
        {
            StdOut.println("StackMain size="+stackMain.size());
            StdOut.println("StackAssist size="+stackAssist.size());
        }
        public void showAll()
        {
            StdOut.println("StackMain is:");
            for(Character i:stackMain)
                StdOut.print(i);
            //
            StdOut.println();
            StdOut.println("StackAssist is:");
            for(Character i:stackAssist)
                StdOut.print(i);
        }
       
        public static void main(String[] args)
        {
            Buffer b=new Buffer();
            while(!StdIn.isEmpty())
            {
                char item=StdIn.readChar();
                b.insert(item);
            }
                
            //
            b.showSize(); 
            StdOut.println("Buffer is:");
            b.showAll();
            //
            StdOut.println("-------");
            b.left(2);
            b.showSize();
            StdOut.println("after Buffer left 2,Buffer is:");
            b.showAll();
            //
            StdOut.println("-------");
            b.right(2);
            b.showSize();
            StdOut.println("after Buffer right 2,Buffer is:");
            b.showAll();
        }
    }
  • 相关阅读:
    如何远程连接POSTGRESQL数据库
    安装windows服务发生异常
    让FFMPEG支持实时流“伴随”转码
    SVN的标准目录结构:trunk、branches、tags
    关于ipcam的UPnP或NAT的知识
    asp.net(C#)服务器绝对路径与URL相对路径互转
    C#通过FFmpeg获得视频文件参数
    FFmpeg的C#.Net封装
    【robotframework】使用RequestsLibrary的Get File For Streaming Upload关键字实现文件上传
    【jenkins】解决win10作为slave启动agent后无法连接master的过程
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854337.html
Copyright © 2020-2023  润新知