数据结构与算法分析Java版练习1.14

来源:互联网 发布:广播电视台和广电网络 编辑:程序博客网 时间:2024/06/05 20:21
package ch01;import java.util.Random;/** * 练习1.14 设计一个泛型类OrderedCollection,它存储Comparable的对象的集合(在数组中),以及 * 该集合的当前大小。提供public方法isEmpty、makeEmpty、insert、remove、findMin和 * findMax。findMin和findMax分别返回该集合中最小和最大的Comparable对象的引用,如果 * 该集合为空,则返回null。 * */class OrderedCollection<T extends Comparable<T>> {private final static int DEFAULT_CAPACITY = 10;private Comparable<T>[] items;private int size;public OrderedCollection() {size = 0;ensureCapacity(DEFAULT_CAPACITY);}public boolean isEmpty() {return size == 0;}public void makeEmpty() {if (size == 0) {return;}for (int i = 0; i < size; ++i) {items[i] = null;}size = 0;}public boolean insert(T x) {//insert(size(), x);int index = binarySearch0(0, size() - 1, x);if (index >= 0)insert(index, x);elseinsert(-index - 1, x);return true;}private void insert(int idx, T x) {if (items.length == size())ensureCapacity(size() * 2 + 1);for (int i = size; i > idx; i--)items[i] = items[i - 1];items[idx] = x;size++;}/** * 这个函数是从Arrays.java中摘抄过来的。 */private int binarySearch0(int fromIndex, int toIndex,            T key) {int low = fromIndex;int high = toIndex;while (low <= high) {int mid = (low + high) >>> 1;T midVal = (T)items[mid];if (midVal.compareTo(key) < 0)low = mid + 1;else if (midVal.compareTo(key) > 0)high = mid - 1;elsereturn mid; // key found}return -(low + 1);  // key not found.}private T remove(int idx) {T removedItem = (T)items[idx];for (int i = idx; i < size() - 1; ++i)items[i] = items[i+1];items[size() - 1] = null;size--;return removedItem;}public boolean remove(T x) {int index = 0;boolean found = false;while (index >= 0) {index = binarySearch0(0, size() - 1, x);if (index >= 0) {remove(index);found = true;}}return found;}public boolean isPresent(T x) {int index = binarySearch0(0, size() - 1, x);if (index >= 0)return true;return false;}public T findMin() {if (size() != 0)return (T)items[0];return null;} public T findMax() {if (size() != 0)return (T)items[size() - 1];return null;} private void ensureCapacity(int newCapacity) {if (newCapacity < size)return;Comparable<T>[] old = items;items = (Comparable<T>[])new Comparable[newCapacity];for (int i = 0; i < size(); ++i)items[i] = old[i];}public int size() {return size;}public void display() {for (int i = 0; i < size(); ++i) {System.out.print(items[i] +" ");}//System.out.println();}}public class EX14 {public static void main(String[] args) {OrderedCollection<Integer> intColl = new OrderedCollection<Integer>();Random rand = new Random(47);for (int i = 0; i < 15; ++i) intColl.insert(rand.nextInt(15) + 1);System.out.print("The Ints: "); intColl.display();System.out.println();System.out.println("isEmpty: " + intColl.isEmpty());System.out.println("if removed 6: " + intColl.remove(6));System.out.println("if removed 11: " + intColl.remove(11));System.out.println("if removed 14: " + intColl.remove(14));System.out.print("The Ints: "); intColl.display();System.out.println();System.out.println("find min: " + intColl.findMin());System.out.println("find max: " + intColl.findMax());System.out.print("make it empty:");intColl.makeEmpty();intColl.display();System.out.println();System.out.println("isEmpty: " + intColl.isEmpty());}}

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东买的暴风电视出现问题了怎么办 控水一个月的三角梅还没开花怎么办 帮别人办手机分期不还怎么办 国美在线没有信用卡分期不了怎么办 手机店办理分期被老板套现了怎么办 美的空调保修卡丢了怎么办 格力空调保修卡丢了怎么办 荣耀9i手机总是滑手怎么办? 春兰空调没发票不给修怎么办 洗衣机顶盖的安全开关坏了怎么办 苹果手机的开关健坏了怎么办 淘宝买的东西快递弄破损了怎么办 京东购买邮来手机里面没有怎么办 孕期建卡病历本丢了怎么办 四维检查胎儿心脏有缺陷怎么办 七个月的宝宝俩个蛋蛋都疝气怎么办 电脑有些网站看视频不能全屏怎么办 小米滑板车坏了售后不保修怎么办 红米4a电池不耐用怎么办 华为手机买个别人退货的怎么办 京东购物怎么查订单查询不到怎么办 退款了又收到货怎么办快递打电话 快递未收到货能退款商家拒绝怎么办 黑色牛仔裤有一块洗白了怎么办 黑色牛仔裤被洗衣液烧了怎么办 在蘑菇街退鞋子商家非说脏了怎么办 牛皮屑怎么办ke靠成都银康 微信订阅号取消关注之后还在怎么办 腾讯新闻红包领取说帐号异常怎么办 计算机职弥报名没选模块怎么办 有人用我手机注册有赞了怎么办 一件代发别人的货被投诉了怎么办 淘宝极速退款后商家拒收快递怎么办 运费险退到天猫垫付账户了怎么办 淘宝卖家食品有问题该怎么办 美团外卖不要辣椒给放了怎么办 旺旺卖家拒收我的消息怎么办 淘宝清空购物车大奖到上限了怎么办 游戏无响应除了退出还能怎么办 淘宝给差评了卖家一直打电话怎么办 电脑说带宽问题无法观看视频怎么办