• 《算法》第三章部分程序 part 5


    ▶ 书中第三章部分程序,加上自己补充的代码,包含公共符号表、集合类型

    ● 公共符号表,用于普通查找表的基本类

      1 package package01;
      2 
      3 import java.util.NoSuchElementException;
      4 import java.util.TreeMap;
      5 import edu.princeton.cs.algs4.StdIn;
      6 import edu.princeton.cs.algs4.StdOut;
      7 
      8 public class class01<Key extends Comparable<Key>, Value> implements Iterable<Key>
      9 {
     10     private TreeMap<Key, Value> st;
     11 
     12     public class01()
     13     {
     14         st = new TreeMap<Key, Value>();
     15     }
     16 
     17     public Value get(Key key)
     18     {
     19         if (key == null)
     20             throw new IllegalArgumentException("
    <get> key == null.
    ");
     21         return st.get(key);
     22     }
     23 
     24     public void put(Key key, Value val)
     25     {
     26         if (key == null)
     27             throw new IllegalArgumentException("
    <put> key == null.
    ");
     28         if (val == null)
     29             st.remove(key);
     30         else
     31             st.put(key, val);
     32     }
     33 
     34     public void delete(Key key)
     35     {
     36         if (key == null)
     37             throw new IllegalArgumentException("
    <delete> key == null.
    ");
     38         st.remove(key);
     39     }
     40 
     41     public boolean contains(Key key)
     42     {
     43         if (key == null)
     44             throw new IllegalArgumentException("
    <contains> key == null.
    ");
     45         return st.containsKey(key);
     46     }
     47 
     48     public int size()
     49     {
     50         return st.size();
     51     }
     52 
     53     public boolean isEmpty()
     54     {
     55         return size() == 0;
     56     }
     57 
     58     public Iterable<Key> keys()
     59     {
     60         return st.keySet();
     61     }
     62 
     63     public Key min()
     64     {
     65         if (isEmpty())
     66             throw new NoSuchElementException("
    <min> empty.
    ");
     67         return st.firstKey();
     68     }
     69 
     70     public Key max()
     71     {
     72         if (isEmpty())
     73             throw new NoSuchElementException("
    <max> empty.
    ");
     74         return st.lastKey();
     75     }
     76 
     77     public Key ceiling(Key key)
     78     {
     79         if (key == null)
     80             throw new IllegalArgumentException("
    <min> key == null.
    ");
     81         Key k = st.ceilingKey(key);
     82         if (k == null)
     83             throw new NoSuchElementException("
    <min> k == null.
    ");
     84         return k;
     85     }
     86 
     87     public Key floor(Key key)
     88     {
     89         if (key == null)
     90             throw new IllegalArgumentException("
    <min> key == null.
    ");
     91         Key k = st.floorKey(key);
     92         if (k == null)
     93             throw new NoSuchElementException("
    <min> k == null.
    ");
     94         return k;
     95     }
     96 
     97     public static void main(String[] args)
     98     {
     99         class01<String, Integer> st = new class01<String, Integer>();
    100         for (int i = 0; !StdIn.isEmpty(); i++)
    101         {
    102             String key = StdIn.readString();
    103             st.put(key, i);
    104         }
    105         for (String s : st.keys())
    106             StdOut.println(s + " " + st.get(s));
    107     }
    108 }

    ● 集合类型

      1 package package01;
      2 
      3 import java.util.NoSuchElementException;
      4 import java.util.Iterator;
      5 import java.util.TreeSet;
      6 import edu.princeton.cs.algs4.StdOut;
      7 
      8 public class class01<Key extends Comparable<Key>> implements Iterable<Key>
      9 {
     10     private TreeSet<Key> set;
     11 
     12     public class01()
     13     {
     14         set = new TreeSet<Key>();
     15     }
     16 
     17     public class01(class01<Key> x)
     18     {
     19         set = new TreeSet<Key>(x.set);
     20     }
     21 
     22     public void add(Key key)
     23     {
     24         if (key == null)
     25             throw new IllegalArgumentException("
    <add> key == null.
    ");
     26         set.add(key);
     27     }
     28 
     29     public boolean contains(Key key)
     30     {
     31         if (key == null)
     32             throw new IllegalArgumentException("
    <contains> key == null.
    ");
     33         return set.contains(key);
     34     }
     35 
     36     public void delete(Key key)
     37     {
     38         if (key == null)
     39             throw new IllegalArgumentException("
    <delete> key == null.
    ");
     40         set.remove(key);
     41     }
     42 
     43     public int size()
     44     {
     45         return set.size();
     46     }
     47 
     48     public boolean isEmpty()
     49     {
     50         return size() == 0;
     51     }
     52 
     53     public Iterator<Key> iterator()
     54     {
     55         return set.iterator();
     56     }
     57 
     58     public Key max()
     59     {
     60         if (isEmpty())
     61             throw new NoSuchElementException("
    <max> empty.
    ");
     62         return set.last();
     63     }
     64 
     65     public Key min()
     66     {
     67         if (isEmpty())
     68             throw new NoSuchElementException("
    <min> key == null.
    ");
     69         return set.first();
     70     }
     71 
     72     public Key ceiling(Key key)
     73     {
     74         if (key == null)
     75             throw new IllegalArgumentException("
    <ceiling> key == null.
    ");
     76         Key k = set.ceiling(key);
     77         if (k == null)
     78             throw new NoSuchElementException("
    <ceiling> k == null.
    ");
     79         return k;
     80     }
     81 
     82     public Key floor(Key key)
     83     {
     84         if (key == null)
     85             throw new IllegalArgumentException("
    <floor> key == null.
    ");
     86         Key k = set.floor(key);
     87         if (k == null)
     88             throw new NoSuchElementException("
    <floor> k == null.
    ");
     89         return k;
     90     }
     91 
     92     public class01<Key> union(class01<Key> that)
     93     {
     94         if (that == null)
     95             throw new IllegalArgumentException("
    <floor> key == null.
    ");
     96         class01<Key> c = new class01<Key>();
     97         for (Key x : this)
     98             c.add(x);
     99         for (Key x : that)
    100             c.add(x);
    101         return c;
    102     }
    103 
    104     public class01<Key> intersects(class01<Key> that)
    105     {
    106         if (that == null)
    107             throw new IllegalArgumentException("
    <floor> key == null.
    ");
    108         class01<Key> c = new class01<Key>();
    109         if (size() < that.size())          // 遍历较小的集合,去较大的集合中匹配,无所谓?
    110         {
    111             for (Key x : this)
    112             {
    113                 if (that.contains(x))
    114                     c.add(x);
    115             }
    116         }
    117         else
    118         {
    119             for (Key x : that)
    120             {
    121                 if (contains(x))
    122                     c.add(x);
    123             }
    124         }
    125         return c;
    126     }
    127 
    128     public boolean equals(Object other)
    129     {
    130         if (other == this)
    131             return true;
    132         if (other == null)
    133             return false;
    134         if (other.getClass() != getClass())
    135             return false;
    136         class01 that = (class01) other;
    137         return set.equals(that.set);
    138     }
    139 
    140     @Override
    141     public int hashCode()
    142     {
    143         throw new UnsupportedOperationException("
    <hashCode> hashCode() not supported,
    ");
    144     }
    145 
    146     @Override
    147     public String toString()                    // 把集合的元素放进大括号中列出
    148     {
    149         String s = set.toString();
    150         return "{ " + s.substring(1, s.length() - 1) + " }";
    151     }
    152 
    153     public static void main(String[] args)
    154     {
    155         class01<String> set = new class01<String>();
    156         StdOut.println("set = " + set);     // 输出空集合
    157 
    158         set.add("www.cs.princeton.edu");    // 插入一些元素用于测试方法
    159         set.add("www.cs.princeton.edu");
    160         set.add("www.princeton.edu");
    161         set.add("www.math.princeton.edu");
    162         set.add("www.yale.edu");
    163         set.add("www.amazon.com");
    164         set.add("www.simpsons.com");
    165         set.add("www.stanford.edu");
    166         set.add("www.google.com");
    167         set.add("www.ibm.com");
    168         set.add("www.apple.com");
    169         set.add("www.slashdot.com");
    170         set.add("www.whitehouse.gov");
    171         set.add("www.espn.com");
    172         set.add("www.snopes.com");
    173         set.add("www.movies.com");
    174         set.add("www.cnn.com");
    175         set.add("www.iitb.ac.in");
    176 
    177         StdOut.println(set.contains("www.cs.princeton.edu"));
    178         StdOut.println(!set.contains("www.harvardsucks.com"));
    179         StdOut.println();
    180         StdOut.println("ceiling(www.simpsonr.com) = " + set.ceiling("www.simpsonr.com"));
    181         StdOut.println("ceiling(www.simpsons.com) = " + set.ceiling("www.simpsons.com"));
    182         StdOut.println("floor(www.simpsonr.com)   = " + set.floor("www.simpsonr.com"));
    183         StdOut.println("floor(www.simpsons.com)   = " + set.floor("www.simpsons.com"));
    184         StdOut.println();
    185         StdOut.println("set = " + set);
    186         StdOut.println();
    187         for (String s : set)                // 直接列出表中元素
    188             StdOut.println(s);
    189         StdOut.println();
    190         class01<String> set2 = new class01<String>(set);
    191         StdOut.println(set.equals(set2));
    192     }
    193 }
  • 相关阅读:
    C# 以GZip解压缩
    C# 获取时间戳(支持毫秒)
    C#中 DateTime 转 DateTimeOffset
    C# WPF中 SecureString 转 String
    C# 根据文件头判断文件类型
    C#中 MD5 32位加密
    C#中 Stream转为byte[]
    C#中byte[]转BitmapImage
    sql按天分组
    eclispe报错PermGen space
  • 原文地址:https://www.cnblogs.com/cuancuancuanhao/p/9795433.html
Copyright © 2020-2023  润新知