码迷,mamicode.com
首页 > 编程语言 > 详细

Java语言描述顺序表类,顺序表类的基本操作实现

时间:2019-04-06 19:01:09      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:组成   java语言   移除   can   row   system   exce   isp   小例子   

数据结构(Java版)ch2 线性表的顺序存储(顺序表)

 

线性表的抽象数据Java接口描述如下:

package ch2;
/**
 * 线性表的抽象数据接口,用Java语言描述线性表的这些功能!
 * @author 房廷飞
 *
 */
public interface IList {
    public void clear();  //将线型表置成空表
    public boolean isEmpty();  //判断是不是空表
    public int length();  //返回线性表的长度
    public Object get(int i) throws Exception;  //返回线性表中第i个数据元素
    public void insert(int i,Object x) throws Exception;  //插入x作为第i个元素
    public void remove (int i) throws Exception;  //s删除第i个元素
    public int indexOf(Object x);  //查找并返回元素x首次出现的位序号
    public void display();  //输出线性表中各个数据元素的值
    

}

顺序表类的Java语言描述,顺序表类的基本操作实现:

package ch2;
/**
 * 用Java语言描述线性表的接口指定功能
 * @author 房廷飞
 *
 */
public class SqList implements IList{  //执行IList接口
    //构造一个存储空间为maxsize的顺序表
    private Object[] listItem;  //顺序表的存储空间
    private int curLen;  //顺序表当前的长度
    private int maxSize;
    
    //构造一个存储空间为maxsize的顺序表
    public SqList (int maxsize) {
        curLen=0;
        maxSize=maxsize;
        listItem=new Object[maxSize];
    }

    @Override
    public void clear() {
        // TODO Auto-generated method stub
        curLen=0;
        
    }

    @Override
    public boolean isEmpty() {
        // TODO Auto-generated method stub
        return curLen==0;
    }

    @Override
    public int length() {
        // TODO Auto-generated method stub
        return curLen;
    }

    @Override
    public Object get(int i) throws Exception {
        // TODO Auto-generated method stub
        if(i<0||i>curLen-1)
            throw new Exception("第"+i+"个元素不存在!");
        return listItem[i];
    }

    @Override
    public void insert(int i, Object x) throws Exception {
        // TODO Auto-generated method stub
        if (curLen==maxSize)
            throw new Exception("顺序表已满,不能插入!");
        if (i<0||i>curLen)
            throw new Exception("插入位置不合法!");
        for(int j=curLen;j>i;j--) {    //插入是从最后递减重排序        //标识,可尝试改
            listItem[j]=listItem[j-1];
        }
        listItem[i]=x;
        curLen++;
            
            
    }

    @Override
    public void remove(int i) throws  Exception{
        // TODO Auto-generated method stub
        if(i<0||i>curLen-1)
            throw new Exception("移除位置不合法!");
        for(int j=i;j<curLen-1;j++) {    //移除是从i处递增重排序
            listItem[j]=listItem[j+1];
        }
        curLen--;
        
    }

    @Override
    public int indexOf(Object x) {
        // TODO Auto-generated method stub
        for(int i=0;i<=curLen;i++) {
            if(listItem[i].equals(x)) {
                return i;
            }
        }
        return -1;
    }

    @Override
    public void display() {
        // TODO Auto-generated method stub
        for(int i=0;i<curLen;i++) {
            System.out.println(listItem[i]);
        }
        }
    }

通过两个小例子应用顺序表:

demo1:

package ch2;

import java.util.Scanner;
/**
 *  例一:建立一个由a-z的26个英文字母组成的字母顺序表,求每个字母的直接前驱和直接后继,编程实现!
 * @author 房廷飞
 *
 */

public class Practice01 extends SqList{

    public Practice01(int maxsize) {
        super(maxsize);
        // TODO Auto-generated constructor stub
    }
    public static void main(String[] args) throws Exception {
        Practice01 p1=new Practice01(26);
        for(int i=0;i<26;i++) {
            p1.insert(i,(char)(97+i));
        }
        System.out.println("请输入要查询的字母位序号(0~25):");
        int i = new Scanner(System.in).nextInt();
        if(i>0&&i<25) {
            System.out.println("第"+i+"个字母的直接前驱为:"+p1.get(i-1));
            System.out.println("第"+i+"个字母的直接后驱为:"+p1.get(i+1));
        }
        else if(i==0) {
            System.out.println("第"+i+"个字母的直接前驱不存在,直接后驱为:"+p1.get(i+1));
        }
        else {
            System.out.println("第"+i+"个字母的直接后驱不存在,直接前驱为:"+p1.get(i-1));
        }
    }
}

demo2:

package ch2;
/**
 * 例二:建立一个顺序表,表中数据为5个学生的成绩(89,93,92,90,100),然后查找成绩为90的数据元素,并输出其在数据表中的位置。
 * @author 房廷飞
 *
 */
public class Practice02 extends SqList{

    public Practice02(int maxsize) {
        super(maxsize);
        // TODO Auto-generated constructor stub
    }
    public static void main(String[] args) throws Exception {
        Practice02 p2=new Practice02(5);
        p2.insert(0, 89);
        p2.insert(1, 93);
        p2.insert(2, 92);
        p2.insert(3, 90);
        p2.insert(4, 100);
        int a=p2.indexOf(90);
        if(a==-1) {
            System.out.println("顺序表中不存在成绩为90的学生!");
        }
        else {
            System.out.println("顺序表中成绩为90的数据元素的位置为:"+a);  //3
        }
    }
}

 

数据结构(Java版)ch2 线性表的顺序存储(顺序表)

 

2019-04-06    17:51:34    房廷飞        加油!

 

Java语言描述顺序表类,顺序表类的基本操作实现

标签:组成   java语言   移除   can   row   system   exce   isp   小例子   

原文地址:https://www.cnblogs.com/fangtingfei/p/10662397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!