数据结构——Java实现顺序表
一、分析
什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表。一个标准的顺序表需要实现以下基本操作:
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实现顺序表的更多相关文章
- java实现顺序表、链表、栈 (x)->{持续更新}
1.java实现节点 /** * 节点 * @luminous-xin * @param <T> */ public class Node<T> { T data; Node& ...
- 【数据结构】之顺序表(Java语言描述)
之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...
- 数据结构之线性顺序表ArrayList(Java实现)
一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...
- 五种编程语言解释数据结构与算法——顺序表2(java与C++语言实现)
5.java实现方式: 5.1.顺序表的抽象结构 package com.xgp.顺序表; public interface MyList<T> { //1. initList(& ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- (java实现)顺序表-ArrayList
什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入 ...
- Java实现顺序表
利用顺序存储结构表示的顺序表称为顺序表. 它用一组连续的地址存储单元一次存放线性表中的数据元素. 顺序表的实现是数据结构中最简单的一种. 由于代码中已经有详细注释,代码外不再阐述. 下次再陈上关于顺序 ...
- C++数据结构学习之顺序表
顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型.它通常包含三个私有成分,即指向数据数组的头指针.当前表长以及表的实际容量.表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组 ...
- 【数据结构】之顺序表(C语言描述)
顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...
随机推荐
- Haskell学习-functor
原文地址:Haskell学习-functor 什么是Functor functor 就是可以执行map操作的对象,functor就像是附加了语义的表达式,可以用盒子进行比喻.functor 的定义可以 ...
- 理解ASP.NET Core 依赖注入
目录: 一.什么是依赖注入 1.1.什么是依赖? 1.2. 什么是注入? 1.3.依赖注入解决的问题 二.服务的生命周期(.Net Core DI) 三.替换默认服务容器 3.1.为什么替换默认服务容 ...
- 第一章.java&golang的区别之:闭包
对于golang一直存有觊觎之心,但一直苦于没有下定决心去学习研究,最近开始接触golang.就我个人来说,学习golang的原动力是因为想要站在java语言之外来审视java和其它语言的区别,再就是 ...
- 实时语音趣味变声,大叔变声“妙音娘子”Get一下
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云 发表于云+社区专栏 游戏社交化是近年来游戏行业发展的重要趋势,如何提高游戏的社交属性已成为各大游戏厂商游戏策划的重要组成部 ...
- 六大设计原则(三)DIP依赖倒置原则
依赖倒置原则DIP(Dependence Inversion Principle) 依赖倒置原则的含义 高层模块不能依赖低层模块,二者都应该依赖其抽象. 抽象不应该依赖于细节. 细节应该依赖抽象. 什 ...
- 【转载】 Sqlserver中查看自定义函数被哪些对象引用
Sqlserver数据库中支持自定义函数,包含表值函数和标量值函数,表值函数一般返回多个数据行即数据集,而标量值函数一般返回一个值,在数据库的存储过程中可调用自定义函数,也可在该自定义函数中调用另一个 ...
- SQLServer之创建数据库架构
创建数据库架构注意事项 包含 CREATE SCHEMA AUTHORIZATION 但未指定名称的语句仅允许用于向后兼容性. 该语句未引起错误,但未创建一个架构. CREATE SCHEMA 可以在 ...
- pod command
pod 基础使用命令 创建Podfile文件 1 pod init 使用命令打开Podfile文件 1 open -a Xcode Podfile 搜索pod 库 1 pod search 库名 更新 ...
- Exchange-重建见证服务器和目录
问题描述: 在升级Exchange 2013 CU22检查群集节点状态的过程中发现群集组处于失败状态,具体报错信息如下:警告:数据库可用性组"***"见证处于失败状态.数据库可用性 ...
- JS-JSON知识点总结
一.JSON的2个重要方法:JSON.stringify(),JSON.parse() //json转字符串:JSON.stringify() let myJson = { name: 'lizhao ...