一、分析

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

  1、初始化顺序表

  2、销毁顺序表

  3、清空顺序表

  4、检测顺序表是否为空

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

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

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

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

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

  10、向指定位置插入元素

  11、删除指定位置的元素

  12、遍历顺序表

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

二、实现

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

 class InitList{

     private int length;              //顺序表长度,表示顺序表中的元素个数

     private int [] list;             //数组,顺序表主体

     public InitList(int max){        //构造函数,用来初始化顺序表时定义顺序表的最大长度
this.list = new int[max];
this.length = 0;
}
}

2、清空顺序表

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

3、检测顺序表是否为空

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

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

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

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

 public int [] getElem(int site) {

     int [] ret = new int[1];                    //用来存储获取的值

     if(site < 1 || site > this.length) {        //检测输入的位置是否合法
return null;
} ret[0] = this.list[site - 1]; //获取指定位置的值
return ret;
}

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

 public int locateElem(int value) {

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

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

 public int [] priorElem(int value) {

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

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

 public int [] nextElem(int value) {          //代码逻辑同直接前驱,此处不再赘述

     int [] ret = new int[this.length];
int in = 1; for(int i = 0; i < this.length - 1; i++) {
if(this.list[i] == value) {
ret[in] = this.list[i + 1];
in++;
}
} if(in != 1) {
ret[0] = in - 1;
return ret;
}else {
return null;
}
}

9、向指定位置插入元素

 public int listInsert(int site,int value) {

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

10、删除指定位置的元素

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

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的完整实现,由于只定义了整数的数组,因此只能操作整数数据,但顺序表的基本思想都已实现。

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

  1. java实现顺序表、链表、栈 (x)->{持续更新}

    1.java实现节点 /** * 节点 * @luminous-xin * @param <T> */ public class Node<T> { T data; Node& ...

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

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  3. 数据结构之线性顺序表ArrayList(Java实现)

    一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...

  4. 五种编程语言解释数据结构与算法——顺序表2(java与C++语言实现)

    5.java实现方式: 5.1.顺序表的抽象结构 package com.xgp.顺序表; public interface MyList<T> { //1. initList(& ...

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

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  6. (java实现)顺序表-ArrayList

    什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入 ...

  7. Java实现顺序表

    利用顺序存储结构表示的顺序表称为顺序表. 它用一组连续的地址存储单元一次存放线性表中的数据元素. 顺序表的实现是数据结构中最简单的一种. 由于代码中已经有详细注释,代码外不再阐述. 下次再陈上关于顺序 ...

  8. C++数据结构学习之顺序表

    顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型.它通常包含三个私有成分,即指向数据数组的头指针.当前表长以及表的实际容量.表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组 ...

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

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

随机推荐

  1. Nginx+Keepalived 集群方案

    1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...

  2. Java并发编程面试题 Top 50 整理版

    本文在 Java线程面试题 Top 50的基础上,对部分答案进行进行了整理和补充,问题答案主要来自<Java编程思想(第四版)>,<Java并发编程实战>和一些优秀的博客,当然 ...

  3. C# 替换Word文本—— 用文档、图片、表格替换文本

    编辑文档时,对一些需要修改的字符或段落可以通过查找替换的方式,快速地更改.在C# 在word中查找及替换文本一文中,主要介绍了在Word中以文本替换文本的方法,在本篇文章中,将介绍如何用一篇Word文 ...

  4. 接口以及 LeetCode 每日一题

    1 接口 1.1 接口的概念 接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心类内方法的实现细节,只是规定这批类里面必须提供某些方法.所以接口体现的是规范和实现分离的设计哲 ...

  5. Web前端-Ajax基础技术(下)

    Web前端-Ajax基础技术(下) 你要明白ajax是什么,怎么使用? ajax,web程序是将信息放入公共的服务器,让所有网络用户可以通过浏览器进行访问. 浏览器发送请求,获取服务器的数据: 地址栏 ...

  6. 驰骋工作流引擎-流程数据md5加密

    关键字:工作流程数据加密  md5  数据保密流程数据防篡改软加密设置方式: 对工作流引擎的数据加密研究, 流程数据的加密方案与实现过程.输入图片说明需求背景1, 流程数据加密是为了防止流程数据被篡改 ...

  7. Android拦截并获取WebView内部POST请求参数

    起因: 有些时候自家APP中嵌入的H5页面并不是自家的.但是很多时候又想在H5不知情的情况下获取H5内部请求的参数,这应该怎么做到呢? 带着这个疑问,就有了这篇博客. 实现过程: 方案一: 最开始想到 ...

  8. 【Android】OkHttp3总结与封装

    开始使用 在app目录下的build.gradle中添加依赖: implementation 'com.squareup.okhttp3:okhttp:3.13.1' implementation ' ...

  9. C语言中的位段(位域)知识

    在结构体或类中,为了节省成员的存储空间,可以定义某些由位组成的字段,这些字段可以不需要以byte为单位. 这些不同位长度的字段实际存储于一个或多个整形变量.位段成员必须声明为int, signed i ...

  10. JS INPUT输入的时候全角自动转为半角

    function CtoH(obj){var str=obj.value;var result="";for (var i = 0; i < str.length; i++) ...