java实现顺序表的增加,删除,查找,打印

博主上个学期学了数据结构(C语言版),第一章就是顺序表。这个学期学的是java,同样可以实现之前的代码。这里把代码贴出来,方便以后学习,回顾。
文件名:App.java

/*编写类,实现如下功能:
 *1、创建有序顺序表
 *2、包含如下基本操作:初始化、增加、删除、查找、打印元素
 *   注意:初始化不同于用new 创建元素。
 *
 *目的:
 * 1、理解成员变量、成员方法的含义
 *    注意:相关方法的参数列表与C不同,顺序表成员的存取也与C不同
 * 2、理解类=成员变量+成员方法,以及其使用方式。
 **/
import java.util.Scanner;
class SortedList{//按升序排列的顺序表
    final int MaxNum=100; //最大容量
    int[] a=new int[MaxNum];//如果期望在构造对象时决定顺序表的容量,如何处理?
    int len;
    void init(){ len=0;}
    void add(int x){//将x插入顺序表的合适位置【参数列表与C不同】
        if(len==MaxNum){
            System.out.print("表已满,无法插入!"); return;
        }
        int i;
        for(i=len-1; i>=0&&a[i]>x; i--)//找合适位置,同时移出空位
            a[i+1]=a[i];
        a[i+1]=x;
        len++;
    }
    int findX(int x){//在顺序表中查找值为x的元素,返回其下标。找不到则返回-1
        if(len==0)return -1;
        int mid,low,high;
        low=0;high=len-1;
        while(low<=high){
            mid=(low+high)/2;
            if(x==a[mid])return mid;
            if(x<a[mid])high=mid-1;
            else low=mid+1;
        }
        return -1;
    }
    void deleteX(int x){//删除第一个值为x的元素
        if(len==0) return;
        int pos,i;
        //注意:for(int i=...)其中i的作用域仅限于该for循环,出循环则无意义
        pos=findX(x);
        if(pos==-1)return;
        for(i=pos+1; i<len; i++)
            a[i-1]=a[i];//找到合适位置
        len--;
    }
    void showInfo(){
        for(int i=0; i<len; i++)
            System.out.print(a[i]+" ");
    }
}
class App{
    static SortedList creatList(){//输入一组数据,以-1结束,创建有序表
        //这个方法代表着在外部使用SortedList类
        SortedList sL=new SortedList();
        Scanner sc=new Scanner(System.in);
        int x;
        x=sc.nextInt();
        while(x!=-1){
            sL.add(x); //注:由于创建的是有序表,不能将此句改成sL.a[i]=x;
            x=sc.nextInt();
        }
        return sL;
    }
    public static void main (String[] args) {
        System.out.print("请输入一组数,-1结束:\n");
        SortedList sL=creatList();
        System.out.print("有序表数据为:\n");
        sL.showInfo();
        System.out.print("\n请输入要删除的数:");
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt();
        sL.deleteX(x);
        System.out.print("有序表数据为:\n");
        sL.showInfo();
        System.out.print("\n请输入要插入的数:");
        x=sc.nextInt();  sL.add(x);
        System.out.print("有序表数据为:\n");
        sL.showInfo();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半缘修道半缘君丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值