《算法》第三章部分程序 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("\n<get> key == null.\n");
 21         return st.get(key);
 22     }
 23
 24     public void put(Key key, Value val)
 25     {
 26         if (key == null)
 27             throw new IllegalArgumentException("\n<put> key == null.\n");
 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("\n<delete> key == null.\n");
 38         st.remove(key);
 39     }
 40
 41     public boolean contains(Key key)
 42     {
 43         if (key == null)
 44             throw new IllegalArgumentException("\n<contains> key == null.\n");
 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("\n<min> empty.\n");
 67         return st.firstKey();
 68     }
 69
 70     public Key max()
 71     {
 72         if (isEmpty())
 73             throw new NoSuchElementException("\n<max> empty.\n");
 74         return st.lastKey();
 75     }
 76
 77     public Key ceiling(Key key)
 78     {
 79         if (key == null)
 80             throw new IllegalArgumentException("\n<min> key == null.\n");
 81         Key k = st.ceilingKey(key);
 82         if (k == null)
 83             throw new NoSuchElementException("\n<min> k == null.\n");
 84         return k;
 85     }
 86
 87     public Key floor(Key key)
 88     {
 89         if (key == null)
 90             throw new IllegalArgumentException("\n<min> key == null.\n");
 91         Key k = st.floorKey(key);
 92         if (k == null)
 93             throw new NoSuchElementException("\n<min> k == null.\n");
 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("\n<add> key == null.\n");
 26         set.add(key);
 27     }
 28
 29     public boolean contains(Key key)
 30     {
 31         if (key == null)
 32             throw new IllegalArgumentException("\n<contains> key == null.\n");
 33         return set.contains(key);
 34     }
 35
 36     public void delete(Key key)
 37     {
 38         if (key == null)
 39             throw new IllegalArgumentException("\n<delete> key == null.\n");
 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("\n<max> empty.\n");
 62         return set.last();
 63     }
 64
 65     public Key min()
 66     {
 67         if (isEmpty())
 68             throw new NoSuchElementException("\n<min> key == null.\n");
 69         return set.first();
 70     }
 71
 72     public Key ceiling(Key key)
 73     {
 74         if (key == null)
 75             throw new IllegalArgumentException("\n<ceiling> key == null.\n");
 76         Key k = set.ceiling(key);
 77         if (k == null)
 78             throw new NoSuchElementException("\n<ceiling> k == null.\n");
 79         return k;
 80     }
 81
 82     public Key floor(Key key)
 83     {
 84         if (key == null)
 85             throw new IllegalArgumentException("\n<floor> key == null.\n");
 86         Key k = set.floor(key);
 87         if (k == null)
 88             throw new NoSuchElementException("\n<floor> k == null.\n");
 89         return k;
 90     }
 91
 92     public class01<Key> union(class01<Key> that)
 93     {
 94         if (that == null)
 95             throw new IllegalArgumentException("\n<floor> key == null.\n");
 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("\n<floor> key == null.\n");
108         class01<Key> c = new class01<Key>();
109         if (this.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 (this.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() != this.getClass())
135             return false;
136         class01 that = (class01) other;
137         return this.set.equals(that.set);
138     }
139
140     @Override
141     public int hashCode()
142     {
143         throw new UnsupportedOperationException("\n<hashCode> hashCode() not supported,\n");
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 }

原文地址:https://www.cnblogs.com/cuancuancuanhao/p/9795433.html

时间: 2024-10-13 02:45:30

《算法》第三章部分程序 part 5的相关文章

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

? 书中第三章部分程序,加上自己补充的代码,包含双向索引表.文建索引.稀疏向量类型 ● 双向索引表 1 package package01; 2 3 import edu.princeton.cs.algs4.ST; 4 import edu.princeton.cs.algs4.Queue; 5 import edu.princeton.cs.algs4.In; 6 import edu.princeton.cs.algs4.StdIn; 7 import edu.princeton.cs.a

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

? 书中第三章部分程序,加上自己补充的代码,包括散列表.线性探查表 ● 散列表 1 package package01; 2 3 import edu.princeton.cs.algs4.Queue; 4 import edu.princeton.cs.algs4.SequentialSearchST; 5 import edu.princeton.cs.algs4.StdIn; 6 import edu.princeton.cs.algs4.StdOut; 7 8 public class

第三章—Windows程序

这一章我都不知道该如何写了,呵呵~~ 毕竟,Win32是一个非常深奥的系统,目前还容不得我这种 小辈在这儿说三道四,不过,我既然是要写给那些入门阶段的朋友们看的,又不是写给那些搞程序设计老鸟看的,所以,我也犯不着怕被人背后指着骂 本章的名字就叫<Windows程序>而不是<Windows程序设计>所以,我只是讲一些关于Windows程序运作的原理: Windows 为什么叫Windows,相信所有用过的朋友都可以明白,那桌面上一个一个的窗口,就是它名字的由来.也就是这一个又一个窗口

Python编程入门-第三章 编写程序 -学习笔记

第三章 编写程序 1.编辑源程序.运行程序 可通过IDLE中File>New File新建一个文本以编辑源程序,编辑完成可通过Run>Run Module(或者F5快捷键)来运行程序.Python源文件都以.py格式存储. 2.从命令行运行程序 除了上述利用IDLE的集成功能运行程序的方式外,当然也可以通过命令行运行程序,命令格式为:python ‘源文件名称.py’. 3.编译源代码 当运行py格式文件时,Python会自动创建相应的.pyc文件,该文件包含编译后的代码即目标代码,目标代码基

算法第三章上机实验

算法第三章上机实验 数字三角形 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. #include <iostream> using namespace std; int maxsum(int a[100][100],int n){ int b[100][100]={0}; for(int i=n-1;i>=0;i--){ for(int j=i;j>=0;j--){

揭露动态规划真面目——算法第三章上机实践报告

算法第三章上机实践报告 一.        实践题目 7-2 最大子段和 (40 分) 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值.当所给的整数均为负数时,定义子段和为0. 要求算法的时间复杂度为O(n). 输入格式: 输入有两行: 第一行是n值(1<=n<=10000): 第二行是n个整数. 输出格式: 输出最大子段和. 输入样例: 在这里给出一组输入.例如: 6 -2 11 -4 13 -5

《算法》第一章部分程序

? 书中第一章部分程序,加上自己补充的代码.包括若干种二分搜索和寻找图上连通分量数的两种算法. ● 代码,二分搜索 1 package package01; 2 3 import java.util.Arrays; 4 import edu.princeton.cs.algs4.StdRandom; 5 6 public class class01 7 { 8 public int binarySearch(int [] a, int target) // 非递归实现 9 { 10 int lp

算法第三章上机实践报告——动态规划

1.实践题目 7-1 数字三角形 (30 分) 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 输入格式: 输入有n+1行: 第 1 行是数字三角形的行数 n,1<=n<=100. 接下来 n行是数字三角形各行中的数字.所有数字在0..99 之间. 输出格式: 输出最大路径的值. 输入样例: 在这里给出一组输入.例如: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6

第三章--Win32程序的执行单元(部分概念及代码讲解)(中-线程同步

学习<Windows程序设计>记录 概念贴士: 1. 同步可以保证在一个时间内只有一个线程对其共享资源有控制权.PS:共享资源包括全局变量.公共数据成员或者句柄等. 2. 临界区内核对象和时间内核对象可以很好地用于多线程同步和它们之间的通信. 3. 线程同步必要性:当多个线程在同一个进程中执行时,可能有不止一个线程同时执行同一段代码,访问同一段内存中的数据.多个线程同时读取共享数据没有问题,但是如果同时读写,情况就不同,也许会产生极大的错误.(如:程序CountErr).解决同步问题,就是保证