数据结构(五)顺序结构实现有序线性表SortedList

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/real_ilin/article/details/80220101

有序线性表

  • SortedList

package list;

public interface SortedList {
    void insert(Object obj);

    Object delete(Object obj);

    int check(Object obj);
}
  • SequenceSortedList
package list;

/**
 * 有序表,元素是以大小或其它的顺序进行排序的。
 * 默认是从小到大进行排序的。
 */
public class SequenceSortedList extends SequenceList implements SortedList {

    public SequenceSortedList() {
        super();
    }

    public SequenceSortedList(int n) {
        super(n);
    }

    /**
     * 把一个已经存在的SequenceList的值插入到有序表中。
     *
     * @param list
     */
    public SequenceSortedList(SequenceList list) {
        super(list.size());
        for (int i = 1; i <= list.size(); i++) this.insert(list.value(i));
    }

    /**
     * 向有序表中插入元素,待插入的元素应该从第一个元开始比较
     * 如果插入的元素比这个元素大,则插入到这个位置;
     * 否则继续比较。
     * 这个算法的时间复杂度:比较了i次,如果是插入到i的位置,后边的n-i+1个元素要移动(位置为i的元素也要移动)。
     * 所以总的时间复杂度为O(n+1)次,n为有序表的元素个数。
     *
     * @param obj
     */
    @Override
    public void insert(Object obj) {
        //把x转换为可以比较大小的类型
        Comparable x = (Comparable) obj;
        //遍历所有的元素
        int i;
        for (i = 1; i <= this.size(); i++) {
            if (x.compareTo(this.value(i)) < 0) break;
        }
        this.add(obj,i);
    }

    /**
     * 描述:删除list中与给定值相同的值,并返回。
     * 遍历list,如果元素比obj大,则返回null,表示删除失败。
     * 如果元素与obj相同,则调用remove方法删除元素,并返回删除的元素。
     * 如果所有的元素都比obj小,则返回null,表示删除失败。
     *
     * @param obj
     * @return
     */
    @Override
    public Object delete(Object obj) {
        Comparable x = (Comparable) obj;
        for (int i = 0; i < this.size(); i++) {
            if (x.compareTo(this.value(i)) < 0) return null;
            if (x.compareTo(this.value(i)) == 0) return this.remove(i);
        }
        return null;
    }

    /**
     * 对于有序的list的可以进行二分查找
     * 二分查找的时间复杂度为O(log2底n)
     * 二分查找后边再写
     *
     * @param obj
     * @return
     */
    @Override
    public int check(Object obj) {
        Comparable x = (Comparable) obj;
        for (int i = 1; i <= this.size(); i++) {
            Comparable y = (Comparable) this.value(i);
            if (x.compareTo(y) < 0) return -1;
            if (x.compareTo(y) == 0) return i;
        }
        return -1;
    }
}
  • SequenceSortedListTest
package listTest;

import list.SequenceList;
import list.SequenceSortedList;

public class SortedSequenceListTest {
    public static void main(String[] args) {
        SequenceList sequenceList = new SequenceList();
        sequenceList.add(12,1);
        sequenceList.add(3,2);
        sequenceList.add(45,3);
        System.out.println(sequenceList);
        SequenceSortedList list = new SequenceSortedList(sequenceList);
        System.out.println(list);
        list.remove(2);
        System.out.println(list);
        System.out.println(list.check(45));
    }
}

猜你喜欢

转载自blog.csdn.net/real_ilin/article/details/80220101