学习顺序表,Java实现

顺序表就是按照顺序存储方式的线性表

 

/**
 * @PackageName:com.wcy.xianchen.shujujiegou
 * Description 顺序表的定义,操作
 * @date:2022/7/28
 */
public class SequenceTable {

    public static void main(String[] args){
        int i;
        //定义顺序表变量
        SLType SL = new SLType();
        DATA pdata;
        String key;
        System.out.println("顺序表操作演示");
        //初始化顺序表
        SL.SLInit(SL);
        Scanner input = new Scanner(System.in);
        do {

            System.out.println("输入添加的学号,姓名,年龄");
            DATA data = new DATA();
            data.key = input.next();
            data.name = input.next();
            data.age = input.nextInt();
            SL.SLAdd(SL,data);
            if (data.age == 0){
                break;
            }else {
                continue;
            }

        }while (true);
        System.out.println("顺序表中的节点顺序为");
        SL.SLAll(SL);

        System.out.println("要取出节点的序号");
        i = input.nextInt();
        pdata = SL.findByNum(SL,i);
        if (pdata != null){
            System.out.println("第"+i+"节点数据"+pdata.key+pdata.name+pdata.age);
        }

        System.out.println("根据节点关键字查找");
        key = input.next();

        i = SL.SLFintByCont(SL,key);
        pdata = SL.findByNum(SL,i);
        if (pdata != null){
            System.out.println("第"+i+"节点数据"+pdata.key+pdata.name+pdata.age);
        }
    }

}

class DATA{
    //节点关键字
    String key;
    String name;
    int age;

    public DATA() {

    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}


/**
 * 定义顺序表结构
 */
 class SLType{

    public SLType() {

    }

    static final int MAXLEN=100;

    //保存顺序表的结构数组
    DATA[] listData = new DATA[MAXLEN+1];
    //顺序表已经存储节点的数量
    int listLen;

    /**
     * 初始化线性表
     * @param SL
     */
    void SLInit(SLType SL){
        //初始化为空表
        SL.listLen = 0;
    }

    int SLLength(SLType SL){
        //返回顺序表的元素数量
        return (SL.listLen);
    }

    /**
     * 插入元素
     */
    int SLInsert(SLType SL,int n,DATA data){
        int i;
        if (SL.listLen>= MAXLEN){
            return 0;
        }
        if (n<1 || n > SL.listLen-1){
            return 0;
        }
        //将顺序表中的数据向后移动
        for (i=SL.listLen;i>=n;i--){
            SL.listData[i+1] = SL.listData[i];
        }
        //插入节点
        SL.listData[n]=data;
        SL.listLen++;
        return 1;
    }

    /**
     * 添加元素到表尾部
     * @param SL
     * @param data
     * @return
     */
    int SLAdd(SLType SL,DATA data){

        if (SL.listLen>= MAXLEN){
            return 0;
        }
        SL.listData[++SL.listLen]=data;
        return 1;
    }

    /**
     * 删除节点元素
     * @param SL
     * @param n
     * @return
     */
    int SLDelete(SLType SL,int n){
        int i;
        if (n<1 || n> SL.listLen+1){
            return 0;
        }
        //顺序表向前移动
        for (i=n;i< SL.listLen;i++){
            SL.listData[i] = SL.listData[i+1];
        }
        SL.listLen--;
        return 1;
    }

    /**
     * 根据序号返回元素
     * @param SL
     * @param n
     * @return
     */
    DATA findByNum(SLType SL,int n){
        if (n<1 || n> SL.listLen+1){
            return null;
        }
        return SL.listData[n];
    }

    /**
     * 按照关键字查找节点
     * @param SL
     * @param key
     * @return
     */
    int SLFintByCont(SLType SL,String key){
        int i;
        for ( i=1;i<SL.listLen;i++){

            if (SL.listData[i].key.compareTo(key)==0){
                return i;
            }
        }
        return 0;
    }

    /**
     * 显示顺序表中的所有节点
     * @param SL
     * @return
     */
    int SLAll(SLType SL){
        int i;
        for (i=1;i<SL.listLen;i++){
            System.out.printf("(%s,%s,%s)\n",SL.listData[i].key,SL.listData[i].name,SL.listData[i].age);
        }
        return 0;
    }


}

 总结:通过理解理论,加上代码实践,将掌握如何操作和定义顺序表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值