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

一、分析

  什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表。一个标准的顺序表需要实现以下基本操作:

  1、初始化顺序表

  2、销毁顺序表

  3、清空顺序表

  4、检测顺序表是否为空

  5、返回顺序表的元素个数

  6、返回顺序表中指定位置元素的值

  7、返回顺序表中第一个与指定值相同的元素的位置

  8、返回指定元素的直接前驱

  9、返回指定元素的直接后继

  10、向指定位置插入元素

  11、删除指定位置的元素

  12、遍历顺序表

  在Java中,可以借助数组来表示一组地址连续的存储单元,通过对数组进行操作来表示对顺序表进行操作。我们可以将顺序表定义成一个类,将顺序表的基本操作定义成类的方法,初始化顺序表就是将这个类实例化成对象,销毁顺序表就是销毁对象。

二、实现

1、定义类属性和构造函数

 1 class InitList{
 2
 3     private int length;              //顺序表长度,表示顺序表中的元素个数
 4
 5     private int [] list;             //数组,顺序表主体
 6
 7     public InitList(int max){        //构造函数,用来初始化顺序表时定义顺序表的最大长度
 8         this.list = new int[max];
 9         this.length = 0;
10     }
11 }

2、清空顺序表

1 public void clearList() {
2     this.length = 0;            //由于是用length属性来表示顺序表中的元素个数,所以清空顺序表只需将length置零即可
3 }

3、检测顺序表是否为空

1 public boolean listEmpty() {
2     if(this.length == 0) {         //通过判断length属性是否为零,即可判断顺序表是否为空
3         return true;
4     }else {
5         return false;
6     }
7 }

4、返回顺序表的元素个数

1 public int listLength() {
2     return this.length;           //同上返回length值即可
3 }

5、返回顺序表中指定位置元素的值

 1 public int [] getElem(int site) {
 2
 3     int [] ret = new int[1];                    //用来存储获取的值
 4
 5     if(site < 1 || site > this.length) {        //检测输入的位置是否合法
 6         return null;
 7     }
 8
 9     ret[0] = this.list[site - 1];               //获取指定位置的值
10     return ret;
11 }

6、返回顺序表中第一个与指定值相同的元素的位置

1 public int locateElem(int value) {
2
3     for (int i = 0; i < this.length; i++) {   //遍历顺序表
4         if(this.list[i] == value) {           //逐值比较,如果相同,返回此元素所在位置
5             return i + 1;
6         }
7     }
8     return 0;                                 //如未找到,返回零
9 }

7、返回指定元素的直接前驱

 1 public int [] priorElem(int value) {
 2
 3     int [] ret = new int[this.length];           //定义一个与顺序表同等长度的数组,用来存储找到的直接前驱
 4     int in = 1;                           //从数组的第二个位置开始存储找到的直接前驱,第一个空间用来存储找到的直接前驱的个数
 5
 6     for(int i = 1; i < this.length; i++) {      //遍历顺序表
 7         if(this.list[i] == value) {            //逐值比较,如果相等,存储其直接前驱到数组中
 8             ret[in] = this.list[i - 1];
 9             in++;
10         }
11     }
12
13     if(in != 1) {                      //判断是否找到了直接前驱
14         ret[0] = in - 1;                //将直接前驱的个数存入数组中
15         return ret;
16     }else {
17         return null;
18     }
19 }

8、返回指定元素的直接后继

 1 public int [] nextElem(int value) {          //代码逻辑同直接前驱,此处不再赘述
 2
 3     int [] ret = new int[this.length];
 4     int in = 1;
 5
 6     for(int i = 0; i < this.length - 1; i++) {
 7         if(this.list[i] == value) {
 8             ret[in] = this.list[i + 1];
 9             in++;
10         }
11     }
12
13     if(in != 1) {
14         ret[0] = in - 1;
15         return ret;
16     }else {
17         return null;
18     }
19 }

9、向指定位置插入元素

 1 public int listInsert(int site,int value) {
 2
 3     if(site < 1 || site > this.length + 1) {         //判断输入的位置是否合法
 4         return -1;
 5     }else if(this.length == this.list.length) {       //判断顺序表是否已满
 6         return -2;
 7     }
 8
 9     for(int i = this.length - 1; i >= site - 1; i--) {   //从顺序表的最后一个元素开始,逐个向后移动一位,直到要插入元素的位置,为要插入的元素腾出空间
10         this.list[i+1] = this.list[i];
11     }
12
13     this.list[site - 1] = value;                //插入元素
14     this.length++;                        //顺序表长度加一
15     return 0;
16 }

10、删除指定位置的元素

 1 public boolean listDelete(int site) {
 2     if(site < 1 || site > this.length) {           //判断输入的位置是否合法
 3         return false;
 4     }else if(site == this.length) {                //如果要删除的是最后一个元素,直接将顺序表长度减一即可
 5         this.length--;
 6         return true;
 7     }else {
 8         for (int i = site - 1; i < this.length; i++) {  //从要删除元素的位置开始,将后面的元素逐个向前移动一位,填补删除元素后的空缺
 9             this.list[i] = this.list[i + 1];
10         }
11         this.length--;                     //顺序表长度减一
12         return true;
13     }
14 }

11、遍历顺序表

public String traverseList() {            //遍历顺序表并输出

    String s = "";                    //用来存储顺序表中的值

    for (int i = 0; i < this.length; i++) {    //遍历顺序表,存入字符串中
        s += this.list[i] + "、";
    }

    if(s.length() == 0) {               //如果顺序表为空,直接返回空字符串
        return s;
    }

    return s.substring(0,s.length() - 1);     //删去最后一个顿号
}

三、小结

  以上就是顺序表用Java的完整实现,由于只定义了整数的数组,因此只能操作整数数据,但顺序表的基本思想都已实现。

原文地址:https://www.cnblogs.com/ysyasd/p/10739561.html

时间: 2024-10-12 12:13:10

数据结构——Java实现顺序表的相关文章

JAVA模拟顺序表新增,模拟单链表新增

最近在回顾大学学的数据结构,这里给大家用java模拟顺序表和单链表的新增 1顺序表新增 /** * 顺序表 * * @author cjd * */ public class ArrayList { private Object[] elementData; // 底层是一个数组,目前还没有确定长度 private int size; // 不是数组分配了几个空间,而是元素的个数 public ArrayList() { this(4); } public ArrayList(int initi

C#(数据结构):1.顺序表结构(2)

人生总有那么多未完的篇章,但是有时候今天你没完成的可能你以后再也不会完成.承诺的一切兴许也变成了过眼云烟.想抓住,握紧的拳头却使他们溜的更快.人生恰如初见,几多的欣喜. ----------------------------------------------------------------------------------------------万恶的分割线------------------------------------------------ 分割线都受不了了.好吧之前我们说

C#(数据结构):1.顺序表结构

我们程序员有三大优点:懒.困.自负.很荣幸我这三点都占了.但是木有关系这丝毫动摇不了我学习的决心.因为技术没有止境. -------------------------------------------------------------------------------------万恶的分割线------------------------------------------------------ 一个人生的分割线. 曾多少次我告诉自己要和昨天的自己说再见.不带走自己的过去,新中幻想着永

C#(数据结构):1.顺序表结构(3)

程序员的道路艰难险阻,如果有新生派的小学生问我他可以做程序员吗?我会毫不犹豫的告诉他放下程序立地成佛,千万不要踏足这一行.虽然这行妹子很多,但是勿来,勿入,勿学.不要问我为什么,说多了全是泪... -----------------------------------------------------------------------------------万恶的分割线------------------------------------------------- 好吧情感戏也就这么多了,

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

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

线性表 及Java实现 顺序表、链表、栈、队列

数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至少在一段时间之后,技术可以很快得到提高.同时,它也是软考的重点,我们需要对这部分的内容进行一下总结. 我们先看一下数据结构和算法的整体内容. 1.线性表 概念: 数据元素的排列方式是线性的. 分类: 分类规则是根据上图中元素的存储结构来划分的. (1)顺序表 基本思想:元素的存储空间是连续的.在内

(java实现)顺序表-ArrayList

什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入内存,中间没有一点空隙. 基本操作 每个数据结构都有集合对数据处理的方法,这能让我们更方便的使用保存在数据结构中的数据.顺序表的基本操作有:增(add),删(remove),改(set),查(find),插(insert)等. 在这里我们只详细讲解remove 和 insert 操作,其他实现可看下

数据结构笔记(二)--顺序表

线性表 线性结构:最常用,最简单的一种数据结构,其中的数据元素是有序且是有限的,其 基本特点: 存在一个唯一的被称为 第一个 的数据元素 存在一个唯一的被称为 最后一个 的数据元素 除第一个元素外,每一个元素均有唯一 一个直接前驱 除最后一个元素外,每一个元素均有唯一 一个直接后继 2.1 线性表的逻辑结构 2.1.1线性表的定义 线性表(Linear List) :是由n个数据类型相同的数据元素(结点)组成的有限序列.其中 n 为不小于0的整数.数据元素的个数 n 称为线性表的长度 相关术语:

【数据结构】之顺序表和链表的比较

1.顺序表 顺序表的优点: (1) 方法简单,各种高级语言中都有数组,容易实现.(2) 不用为表示结点间的逻辑关系而增加额外的存储开销.(3) 顺序表具有按元素序号随机访问的特点. 顺序表的缺点: (1) 在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低.(2) 需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置:预先分配过小,又会造成溢出. 2.链表 链表的优点: (1) 在链表中做插入删除操作时,不会影响前面和后面的节点,因此对n较大的链表