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

Posted 房廷飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java语言描述顺序表类,顺序表类的基本操作实现相关的知识,希望对你有一定的参考价值。

数据结构(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语言描述顺序表类,顺序表类的基本操作实现的主要内容,如果未能解决你的问题,请参考以下文章

线性表-顺序表链表类模板的实现(数据结构基础 第2周)

如何用JAVA语言建立含有若干个元素的顺序表,并实现插入,删除,查找等基本操作

数据结构-线性表

数据结构-线性表

关于链表类属类的定义

c++链表类模板问题(不要用c语言,用c++)