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    房廷飞        加油!

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

时间: 2024-12-28 16:40:50

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

设计模式之适配者模式——Java语言描述 | Amos H&#39;s blog

适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模糊属于结构性模式,它结合了两个独立接口的功能 概念阐述 使用适配器模式可以解决在软件系统中,将一些旧的类放入新环境中,但是新环境要求的接口旧的类不能满足的情况. 使用情形: 系统需要使用旧的类,但是此类的接口不符合系统的需要 需要建立一个可以重复使用的类,用于一些彼此之间没有太大关系的一些类 通过接口转换,将一个类插入到另一个类中 优点: 可以让任何两个没有关联的类一起运行 提高了类的复用 增加了类的透明度 灵活性好 缺点: 过多的使用

数据结构与问题求解-Java语言描述(第三版)

数据结构对程序的重要性不言而喻,用java语言来实现常见的一些数据结构,以及在相应数据结构上的操作对学习java的同学来说是必须掌握的. 本系列博文参考<数据结构与问题求解-Java语言描述(第三版)>来实现 在自己学习的过程中,更希望有机会与大家交流. PS :本人是菜鸟,只是用博客的方式激励自己.请轻喷.Fighting!

Java语言Lang包下常用的工具类介绍_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现. 在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Webs

【数据结构】之顺序表(Java语言描述)

之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中,为我们提供了专门的顺序表的数据结构API-- ArrayList . Java中的ArrayList的基本存储思路和C语言中的思路相似,即将所有元素存储在一个数组中,当数组中的元素个数达到某种标准时,就要扩容.由于顺序表中的其他操作在Java和C中的实现方式大同小异,因此,本文不再详细介绍这些操作

数据结构与算法经典问题解析 Java语言描述pdf

下载地址:网盘下载 内容简介 本书以Java为描述语言,介绍了数据结构与算法的基本知识.书中结合企业界的工程实践提炼教学内容,特别对数据结构中易混淆的问题进行了梳理,对每一个问题提出不同的解决方案.本书是一本优秀的数据结构方面的教材. 目录 译者序 前言 第1章绪论1 1.1变量1 1.2数据类型1 1.3数据结构2 1.4抽象数据类型2 1.5什么是算法3 1.6为什么需要算法分析3 1.7算法分析的目的3 1.8什么是运行时间分析4 1.9如何比较算法4 1.10什么是增长率4 1.11常用

【数据结构】之队列(Java语言描述)

在[这篇文章]中,我简单介绍了队列的基本数据结构及操作方式,并用C语言代码描述了队列的基本功能实现. JDK中默认为我们提供了队列的API-- Queue . Queue是一个接口,其中提供了处理队列及其操作的一些基本方法,如果我们想要创建自己的队列,就需要先创建一个类实现Queue接口. 在Java语言中也为我们提供了一些现成的Queue接口的实现类,如下: * @see java.util.Collection * @see LinkedList * @see PriorityQueue *

设计模式之外观模式——Java语言描述

外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.它想现有的系统添加了一个接口,以隐藏系统的复杂性 介绍 意图 为子系统中的一组接口提供了一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 应用实例 电脑只要按下开机键,就会自动执行开机的程序 Java的三层开发模式 优点 减少系统相互依赖 提高灵活性 提高安全性 缺点 不符合开闭原则,如果需要修改东西很麻烦,继承重写都不合适. 实现 我们将创建一个 Shape 接口和实现了 Shape 接口的实

设计模式之责任链模式——Java语言描述

责任链模式为请求创建了一个接受者对象的链.这种模式给予请求的类型,对请求的发送者和接受者进行解耦.这种类型的设计模式属于行为模式.在这种模式下,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该对象,那么它会把相同的请求传给下一个接收者,以此类推 介绍 意图 避免请求发送者和接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止 解决问题 责任链上的处理者负责处理请求,客户只需要将请求发送到责任链上即可,无须关心请求的处理

数据结构(java语言描述)顺序栈的使用(两个大数相加)

利用http://www.cnblogs.com/xleer/p/5289661.html中对顺序栈以及栈的进本方法的定义,实现超过整数上限的两个数的加法计算. 算法: package stack;/********************************************************************** * @author sch ********利用栈,计算两个大数的和.大数的值超过int存储的范围******************************