数据结构——顺序表

程序员.jpg

本篇文章主要是用做代码分享。代码,注释都写得很清楚,不清楚的可以问我,如果有些不对的地方也可以提出来,以便我及时改正。

接口类
//顺序表的接口类
public interface ISeqList {
    int length();   //计算顺序表的长度
    boolean isEmpty();  //判空
    boolean isFull();   //判满
    void insert(int i, Object x) throws Exception;  //插入新元素操作
    Object remove(int i) throws Exception;  //删除操作
    int search(Object x);   //按值查找操作
    Object getelement(int i) throws Exception;  //按序号查找操作
    void showList();    //遍历输出操作
    void clear();   //清空顺序表
}

顺序表完成类

// 顺序表
// 需要接口类,注意语句
// 不能声明泛型数组,则不用泛型

public class SeqList implements ISeqList {
    private Object data[];  // 采用数组存储顺序表数据
    private int length; // 记录表中数据个数(长度)

    // 通过构造方法设置数组容量
    public SeqList(int capacity){
        data = new Object[Math.abs(capacity)];
    }

    //默认给50个容量
    public SeqList() {
        this(50);
    }

    @Override
    public int length() {
        // 求顺序表长度
        return length;
    }
    @Override
    public boolean isEmpty() {
        // 判空
        return length == 0;
    }
    @Override
    public boolean isFull() {
        // 判满
        return length == data.length;
    }
    @Override
    public void insert(int i, Object x) throws Exception {
        // 插入新元素操作,要先判断表是否已满
        if(isFull()){
            throw new Exception("顺序表已满!");
        }
        if(i < 0 || i > length){
            throw new Exception("插入位置有误?");
        }
        for(int j = length; j > i; j--){
            data[j] = data[j-1];
        }
        data[i] = x;
        length++;
    }
    @Override
    public Object remove(int i) throws Exception {
        // 删除操作,按下标删除元素
        if(isEmpty()){
            throw new Exception("顺序表是空表!");
        }
        if(i < 0 || i > length-1){
            throw new Exception("删除位置有误?");
        }
        Object temp = data[i];
        for(; i < length-1; i++){
            data[i] = data[i+1];
        }
        length--;
        return temp;
    }
    @Override
    public int search(Object x) {
        // 查找x在顺序表中的位置,没找到返回-1
        int i = 0;
        while(i < length && !data[i].equals(x)){
            i++;
        }
        if(i == length)
            return -1;
        return i;
//      return (i < length ? i : -1);
    }
    @Override
    public Object getelement(int i) throws Exception {
        // 按下标查找元素,返回元素
        if(i < 0 || i > length-1){
            throw new Exception("第" + i + "个元素不存在!");
        }
        return data[i];
    }
    @Override
    public void showList() {
        // 遍历输出表中数据
        for(int i = 0; i < length; i++){
            System.out.print(data[i] + " ");
        }
        System.out.println();
    }
    @Override
    public void clear() {
        // 清空表
        length = 0;
    }
}

顺序表测试类

//测试类
public class TestSeqList01 {
    public static void main(String[] args) throws Exception {
        SeqList p = new SeqList(10);    //设置顺序表容量为10

        java.util.Scanner input = new java.util.Scanner(System.in);
        System.out.println("输入你想存储的5个数字:");
        for(int i = 0; i < 5; i++){
            int x = input.nextInt();
            p.insert(i, x);
        }
        p.showList();

        System.out.println("数据长度是" + p.length());
        System.out.println(p.isEmpty() + "\n" + p.isFull());

        System.out.println("输入你想查询的数字:");
        int h = input.nextInt();
        System.out.println(h + "的下标是" + p.search(h));

        System.out.println("输入你想查询第几个数字:");
        int y = input.nextInt();
        System.out.println("第" + y + "个数字是:" + p.getelement(y-1));

        System.out.println("输入你想插入的位置,数字:");
        int q = input.nextInt();
        int q1 = input.nextInt();
        p.insert(q, q1);
        p.showList();

        System.out.println("输入你想删除第几个数字:");
        int f = input.nextInt();
        p.remove(f-1);
        p.showList();

        p.clear();
        p.showList();
    }

}

范例

//音乐 歌手类
public class SingerOfMusic {
    private String singer;
    private String music;

    public SingerOfMusic(String singer, String music) {
        super();
        this.singer = singer;
        this.music = music;
    }
    public SingerOfMusic(){}

    public String getSinger() {
        return singer;
    }
    public void setSinger(String singer) {
        this.singer = singer;
    }
    public String getMusic() {
        return music;
    }
    public void setMusic(String music) {
        this.music = music;
    }

    @Override
    public String toString() {
        return "[singer=" + singer + ", music=" + music + "]";
    }

    // 关键代码,匹配操作
    public boolean equals(Object p) {
        return this.singer.equals(((SingerOfMusic)p).getSinger());
    }   
}

范例测试类

//测试类
public class TestSeqList02 {
    public static void main(String[] args) throws Exception {
        SeqList q = new SeqList(10);    //设置顺序表数组容量为10

        java.util.Scanner input = new java.util.Scanner(System.in);
        System.out.println("你要输入几首歌:");
        int num = input.nextInt();

        for(int i = 0; i < num; i++){
            System.out.println("第" + (i+1) + "个歌手和歌:");
            String singer = input.next();
            String music = input.next();
            q.insert(i, new SingerOfMusic(singer, music));
        }

        q.showList();

        System.out.println("请输入你想查询的歌手:");
        String singer = input.next();
        int i = q.search(new SingerOfMusic(singer,null));
        System.out.println("查找结果:" + (i < 0 ? "无此歌手" : q.getelement(i)));

        System.out.println("请输入你想删除的第几个歌手:");
        int j = input.nextInt();
        q.remove(j-1);
        System.out.println("剩下的歌手有:");
        q.showList();

        System.out.println("请输入你想添加的的歌手和歌曲:");
        String singer1 = input.next();
        String music1 = input.next();
        q.insert(num-1, new SingerOfMusic(singer1, music1));
        q.showList();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值