zoukankan      html  css  js  c++  java
  • 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);
            }
        }
        
    }
  • 相关阅读:
    ffmpeg mp4 视频输出为 aac 的命令
    git操作远程分支
    Linux (openSUSE 15.3 ) server ssh 可以使用,sftp无法使用
    小小思考题
    Linux 命令介绍
    2021 年 如何使用VMware 安装 ubuntu 7.04 虚拟机, 配置 apt 源
    Linux 下 命令行 使用浏览器
    oracle.cmd
    Sqlcmd
    vue eslint 配置使用
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5453668.html
Copyright © 2011-2022 走看看