java模拟实现有序表操作

import java.util.Scanner;


class DATA{//创建一个数据类型,用来作为有序表的每一个单元
    String key;
    String name;
    int age;
}

class SLType{//创建一个有序表类,他包含一个data类型的数组,和一个固定长度
    static final int MAXLEN=100;
    DATA[] ListData=new DATA[MAXLEN+1];
    int ListLen;
    
    void SLInit(SLType SL){//有序表初始化,就是将他的长度置为0
        SL.ListLen=0;
    }
    
    int SLLength(SLType SL){//获取有序表长度的方法,就是返回有序表长度。。。。。感觉这个没必要封装这个方法的
        return SL.ListLen;
    }
    
    int SLInsert(SLType SL,int n,DATA data){//插入方法,传入待插入的有序表,和data类型的数据,再把长度加1就可以了
        if(SL.ListLen>=MAXLEN){//插入之前总是要看有序表有没有满
            System.out.print("顺序表已满,不能插入节点n");
            return 0;
        }
        if(n<1||n>MAXLEN){//检查输入节点是否合理
            System.out.println("插入n值有误");
            return 0;
        }
        for(int i=SL.ListLen;i>=n;i--){//从最后一个起,依次向后移动数据,一直移动到要插入的位置
            SL.ListData[i+1]=SL.ListData[i];
        }
        SL.ListData[n]=data;//把data类型的data传进sl的数组中
        SL.ListLen++;//有序表的长度属性加1
        return 1;
    }
    
    
    int SLAdd(SLType SL,DATA data){//在有序表最后面增加一个
        if(SL.ListLen>=MAXLEN){
            System.out.println("顺序表已经满了");
            return 0;
        }
        SL.ListData[++SL.ListLen]=data;//先++,所有下标从1起
        return 1;
    }
    
    int SLDelete(SLType SL,int n){//删除一个有序表元素
        if(n<1||n>SL.ListLen){
            System.out.println("n不符合要求");
            return 0;
        }
        for(int i=n;i<SL.ListLen;i++){//从第n个开始,后一个的值依次覆盖前一个
            SL.ListData[n]=SL.ListData[n+1];
        }
        SL.ListLen--;//长度减一
        return  1;
    }
    
    DATA SLFindbynum(SLType SL,int n){//根据索引找有序表
        if(n<1||n>SL.ListLen+1){//检查n是否符合规范
            System.out.println("n不符合规定");
            return null;
        }
        return SL.ListData[n];
    }
    
    int SLFindbycont(SLType SL,String key){//根据key的值来索引
        for(int i=1;i<=SL.ListLen;i++){
            if(SL.ListData[i].key.compareTo(key)==0){
                return  i;//如果匹配的话返回下标,返回第一个符合条件的
            }
        }
        return 0;
    }
    
    
    int SLAll(SLType SL){//打印所有的有序表元素
//        int i;
    for(int i=1;i<=SL.ListLen;i++){
        
        System.out.printf("(%s,%s,%d)
",SL.ListData[i].key,SL.ListData[i].name,SL.ListData[i].age);//格式化打印
    }
    return 0;
    }
    
    
}










public class list {


    public static void main(String[] args) {
        // TODO code application logic here
        SLType SL =new SLType();
        int i;
        SL.SLInit(SL);
        Scanner in=new Scanner(System.in);
        do{//设计一个死循环,只有在符合某一条件下,才跳出循环
            DATA data=new DATA();//定义一个data用来存放输入的每一组数据
            System.out.println("输入 key  name   age: ");
            data.key=in.next();
            data.name=in.next();
            data.age=in.nextInt();
            if(data.age!=0){
                SL.SLAdd(SL,data);//如果age不为0(一个规定) 就继续把data插入有序表
            }else{
                break;//如果发现输入的age为0,就停止
            }
            
        }while (true);
        SL.SLAll(SL);//显示所有有序表数据
        System.out.println("要取出的顺序是:");
        i=in.nextInt();
        DATA pada=SL.SLFindbynum(SL, i);//获取根据索引得到的data
        if(pada!=null){
            System.out.printf("(%s,%s,%d)
",pada.key,pada.name,pada.age);
        }
        
        System.out.println("要取出的关键字是:");
        String key=in.next();
        i=SL.SLFindbycont(SL, key);//获取根据关键字值获取的索引
        DATA hada=SL.SLFindbynum(SL, i);//获取根据索引得到的data
                if(hada!=null){
            System.out.printf("(%s,%s,%d)
",hada.key,hada.name,hada.age);
        }
    }
    
}
原文地址:https://www.cnblogs.com/tobemaster/p/5453668.html