博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algs4-1.3.38删除第k个元素-单链表实现
阅读量:6270 次
发布时间:2019-06-22

本文共 1673 字,大约阅读时间需要 5 分钟。

1.3.38删除第k个元素。实现一个类并支持表1.3.12中的API:
表1.3.12泛型一般队列的API
public class GeneralizedQueue<Item>
    GeneralizedQueue()//创建一条空队列
    boolean isEmpty()//队列是否为空
    void insert(Item x)//添加一个元素
    Item delete(int k)//删除并返回最早插入的第k个元素
用链表实现该数据类型。注意:我们在第3章中介绍的算法和数据结构可以保证insert()和delete()的实现所需的运行时间和和队列中的元素数量成对数关系-请参见练习3.5.27。
答:
图片
public class GeneralizedQueue<Item>
{
    private class Node
    {
        Item item;
        Node next;
    }
    private Node first=new Node();
    private Node last=new Node();
    private int N=0;
   
    public GeneralizedQueue()
    {}
   
    public boolean isEmpty()
    {return N==0;}
   
   
    public void insert(Item x)
    {
        Node oldlast=last;
        last=new Node();
        last.item=x;
        if(isEmpty())  
            first=last;
        else
            oldlast.next=last;
        N++;
    }
   
    public Item delete(int k)
    {
        if(k<1 || k>N || N==0) return null;
        int i=1;
        Node current=new Node();
        current.next=first;
        while(i!=k)
        {
           current=current.next;
           i++;
        }
       //
       Item item;
       if(k==1 && N==1)
          {
             item=current.next.item;
             first=current.next.next;
             last=first;
         }
       else if(k==1 && N>1)
         {
           item=current.next.item;
           first=current.next.next;
          
         }
         else if(k==N && N>1)
         {
             item=current.next.item;
             last=current;
             last.next=null;
         }
         else
         {
            item=current.next.item;
            current.next=current.next.next;
         }
         N--;
        return item;
    }
  
    public void showAll()
    {
        Node current=first;
        while(current!=null)
        {
            StdOut.print(current.item+" ");
            current=current.next;
        }
    }
   
    public static void  main(String[] args)
    {
        int N=Integer.parseInt(args[0]);
        int k=Integer.parseInt(args[1]);
        GeneralizedQueue<Integer> gq=new GeneralizedQueue<Integer>();
        for(int i=0;i<N;i++)
            gq.insert(i);
        //
        StdOut.print("the k is "+k +" the value is "  +gq.delete(k));
        StdOut.printf("\nQueue left elements is:\n");
        gq.showAll();
    }
}

转载于:https://www.cnblogs.com/longjin2018/p/9854322.html

你可能感兴趣的文章
零元学Expression Blend 4 - Chapter 46 三分钟快速充电-设定Margin的小撇步
查看>>
Format Conditions按条件显示表格记录
查看>>
RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示
查看>>
mysql优化----explain的列分析
查看>>
Python正则表达式
查看>>
Java中CAS详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
命令行man的帮助手册
查看>>
Ubuntu 16.04下为Android编译OpenCV 3.2.0 Manager
查看>>
poi 导入导出的api说明(大全)
查看>>
Fix-Mapped Addresses
查看>>
fmt标签如何计算两个日期之间相隔的天数
查看>>
Spark核心技术原理透视一(Spark运行原理)
查看>>
《Gradle权威指南》--Gradle任务
查看>>
IntelliJ IDEA创建文件时自动填入作者时间 定制格式
查看>>
Android app启动activity并调用onCreate()方法时都默默地干了什么?
查看>>
远程监视jboss应用java内存的配置
查看>>
前端如何接收 websocket 发送过来的实时数据
查看>>
JavaWeb下载文件response
查看>>
Laravel的三种安装方法总结
查看>>