关闭

顺序表--Java实现

2559人阅读 评论(0) 收藏 举报
分类:

顺序表是一个比较重要的数据结构。它的特点有以下:

  1. 逻辑上相邻的数据,在物理存储的位置上也是相邻的。
  2. 存储密度高,需要预先分配空间。后续的代码可以看到。
  3. 便于随机存取。
  4. 但是它存储结构跟数组是一样,所以也就不便于插入和删除。当顺序表较大时,插入和删除都会引起大量数据的移动。如果插入和删除频繁操作的话,最好使用链表的数据结构。顺序表一般存储不经常变动的数据。

一个顺序表的存储数据后,基本操作有: 置空,取表长,取表元素,插入,删除,查找,显示。其实,应该还有修改。我这次没做,其实就是遍历出该元素,然后赋值覆盖掉就好了。

下面是我的代码:
分两段代码,用接口包含顺序表的基本操作方法。然后顺序表类继承接口。
1.接口IList的代码:

public interface IList {
    //置空操作
    public void clear();
    //判空操作
    public boolean isEmpty();
    //取表长度
    public int length();
    //取表元素
    public Object get(int i) throws Exception;
    //插入操作
    public void insert(int i, Object x) throws Exception;
    //删除操作
    public void remove(int i) throws Exception;
    //查找操作
    public int Indexof(Object x);
    //显示
    public void display();
}

顺序表类SqList的代码:

public class SqList implements IList{

    public Object[] listElem;//线性表存储空间
    private int curlen; //线性表当前长度

    //顺序表构造函数,构造一个长度为maxSize的线性表
    public SqList(int maxSize){
        curlen = 0;
        listElem = new Object[maxSize];
    }

    //置空操作
    public void clear() {
        curlen = 0;
    }

    //判断当前长度是否为0,为0即为空表
    public boolean isEmpty() {
        return curlen == 0;
    }

    //取表长度,返回curlen当前长度即可
    public int length() {
        return curlen;
    }

    //取表元素
    public Object get(int i) throws Exception {
        //判断 i 是否合法
        if(i > 0 || i > curlen -1)
            throw new Exception("第"+i+"个元素不存在");
        return listElem[i];
    }

    //插入操作
    public void insert(int i, Object x) throws Exception {
        if(curlen == listElem.length)
            throw new Exception("顺序表已经满了");
        if(i < 0 || i > curlen)
            throw new Exception("插入位置不合法");
        //从尾部往前扫
        for(int j = curlen; j > i; j--)
            listElem[j] = listElem[j - 1];
        listElem[i] = x;
        //插入成功后,表长度+1
        curlen++;
    }

    //删除操作
    public void remove(int i) throws Exception {
        if(i < 0 || i > curlen - 1)
            throw new Exception("删除位置不合法");
        //下标移动要出删除的i处
        for(int j = i; j < curlen - 1; j++)
            listElem[j] = listElem[j++];
        curlen--;
    }

    //查找操作,找到则返回下标,否则返回-1
    public int Indexof(Object x) {
        int j = 0;
        //遍历查找
        while(j < curlen && !listElem[j].equals(x))
            j++;
        if(j < curlen)
            return j;
        else 
            return -1;
    }

    //显示操作
    public void display() {
        //遍历线性表
        for(int i = 0; i < curlen; i++)
            System.out.println(listElem[i]);
    }

    //主函数
    public static void main(String[] args) throws Exception{
        //初始化线性表
        SqList mlist = new SqList(10);
        mlist.insert(0, "a");
        mlist.insert(1, "b");
        mlist.insert(2, "c");
        mlist.insert(3, "d");
        mlist.insert(4, "e");
        //mlist.insert(5, 'f');      报错了,类型出错

        int findFlag = mlist.Indexof("e");
        if(findFlag != -1)
            System.out.println("顺序表中第一次出现'e'的位置是:"+ findFlag);
        else 
            System.out.println("顺序表不存在元素'e'");

        mlist.display();
    }
}

至此,顺序表实现了。

参考书籍《数据结构–Java语言描述》刘晶版。
1
1
查看评论

数据结构的Java实现——顺序表

顺序表的Java实现
  • baoyiming1991
  • baoyiming1991
  • 2011-03-21 18:37
  • 8392

java顺序表

昨天自己在网上找了些教程把C语言的顺序表简单的实现了,完成了之后我就想数据结构是凌驾于所有语言之上的,既然C语言能实现顺序表那么java能不能写呢,想到这儿我就开始赶工敲java代码了,但是当我下手开始写时就发现自己无从下手,因为我用C写时主要是运用了结构体和指针,但是java这两个东西都没有,于是...
  • codeHaoHao
  • codeHaoHao
  • 2016-10-25 10:17
  • 1047

Java实现顺序表及常见操作

//顺序表类,实现ADT List声明的方法,T表示数据元素的数据类型 public class SeqList extends Object{ //对象数组存储顺序表的数据元素,protected声明 protected Object[] element ; //顺序表元素的个数(表长) ...
  • dingjing1994
  • dingjing1994
  • 2017-05-11 20:46
  • 1305

顺序表----java实现

最简单的数据结构——顺序表,此处以数组为例。 顺序表的优点:支持随机读取,内存空间利用率高。 顺序表的缺点:1.需要预先给出最大数据元素个数,这往往很难实现。  2.插入和删除时需要移动大量数据。 SeqList.java package com.sheepmu; public clas...
  • u010093630
  • u010093630
  • 2013-12-29 17:40
  • 1819

java中顺序表的操作

  • 2013-12-22 12:19
  • 5KB
  • 下载

java 实现顺序表

顺序表类package sequence.demo;//线性表 public class SequenceList { private Object[] dataArr = new Object[10]; private final int length; private int ...
  • diwangerdai
  • diwangerdai
  • 2017-05-24 11:45
  • 138

用JAVA实现顺序表

顺序表演示package date;import java.util.Scanner;//顺序表数据元素类Date class Date { // 模拟一个班级的学生记录 String key; String name; int...
  • java_zero2one
  • java_zero2one
  • 2016-09-02 16:08
  • 980

用顺序表实现的简易通讯录(第一版)

实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1.    添加联系人信息 2.    删除指定联系人信息 3.    查找指定联系人信息 4.   ...
  • qq_34992845
  • qq_34992845
  • 2016-12-01 10:26
  • 626

java实现的顺序表数据结构

  • 2010-04-06 12:33
  • 3KB
  • 下载

java实现顺序表数据结构

java实现数据结构
  • wumanxin2018
  • wumanxin2018
  • 2017-12-10 19:32
  • 27
    个人资料
    • 访问:44705次
    • 积分:430
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:4篇
    • 译文:4篇
    • 评论:4条
    文章分类
    最新评论