线性表的顺序存储结构之顺序表类的实现_Java
在上一篇博文——线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构——顺序表类。
首先让我们来看下顺序表的定义:
线性表的顺序存储是用一组连续的内存单元依次存放线性表的数据元素,元素在内存的物理存储次序与它们在线性表中的逻辑次序相同,即元素ai与其直接前驱ai-1及直接后继ai+1的存储位置相邻。顺序存储的线性表也成为顺序表(sequential list)。
顺序表类SeqList提供线性表基于顺序存储结构的一种实现,它有两个私有成员变量table和n,table是一个存放元素的对象数组;n为线性表长度,n≤table.length。SeqList声明如下,它实现了线性表的接口LList。
package dataStructure.linearList;
import dataStructure.linearList.LList; public class SeqList<E> implements LList<E> //顺序表类,实现线性表接口
{ private Object[] table; //对象数组,私有成员 private int n; //顺序表长度 public SeqList(int capacity) //构造方法,创建置顶容量的空表 { this.table = new Object[Math.abs(capacity)]; this.n = 0; } public SeqList() //指定空表的默认容量 { this(16); } public boolean isEmpty() //判断顺序表是否为空,若空返回true { return this.n == 0; } public int length() //返回顺序表长度 { return this.n; } public E get(int index) //返回index(初值为0)位置的对象,若序号无效,返回null { if(index>=0 && index < this.n) { return (E)this.table[index]; } return null; } public E set(int index,E element) //设置index位置的对象为element,若操作成功,放回原对象,否则返回null { if(index >= 0 && index < this.n && element != null) { E old =(E)this.table[index]; this.table[index] = element; return old; } return null; } public boolean add(int index,E element) //在index位置插入element对象,若操作成功返回true,不能插入null { if(element == null) //不能插入null { return false; } if(this.n == table.length) //若数组满,则需要扩充顺序表容量 { Object[] temp = this.table; this.table = new Object[temp.length*2]; //重新申请一个容量更大的数组 for(int i = 0;i < temp.length;i++) { this.table[i] = temp[i]; } } if(index < 0) //下标容错 { index = 0; } if(index > this.n) { index =this.n; } for(int j = this.n-1;j >= index;j--) //元素后移,平均移动n/2 { this.table[j+1] = this.table[j]; } this.table[index] = element; this.n++; return true; } public boolean add(E element) //在顺序表最后插入element对象 { return add(this.n,element); } public E remove(int index) //移去index位置的对象,若操作成功,则返回被移去的对象,否者返回null { if(this.n != 0 && index >= 0 && index < this.n) { E old = (E)this.table[index]; for(int j = index;j < this.n-1;j++) //元素前移,平均移动n/2 { this.table[j] = this.table[j + 1]; } this.table[this.n - 1] = null; this.n--; return old; } return null; } public void clear() //清空顺序表 { if(this.n != 0) { for(int i = 0;i < this.n;i++) { this.table[i] = null; } this.n=0; } } public String toString() //返回显示所有元素的字符串,形式为(,) { String str = "("; if(this.n != 0) { for(int i = 0;i < this.n - 1;i++) { str += this.table[i].toString()+","; } str += this.table[this.n - 1].toString(); } return str + ")"; }
}
顺序表是一种随即存取结构,存取任何一个元素的get()、set()方法的时间复杂度是O(1)。
对顺序表进行插入或删除操作是,算法所花费的时间主要用于移动元素。在等概率情况下,插入一个元素平均需要移动一半的元素,时间复杂度为O(n)。同里,删除一个元素的时间复杂度亦为O(n)。
综上所述,顺序表具有下列特点:
①:元素的物理存储顺序直接反映表中元素的逻辑顺序,可以随机存取元素。
②:插入和删除的操作效率很低。每插入或删除一个元素,可能需要移动大量元素,其平均移动次数是顺序表长度的一半。再者,数组容量不可更改,存在因容量小造成数据溢出,或因容量过大造成内存资源浪费的问题。解决数据溢出的方法是,申请另一个更大容量的数组,并进行数组元素复制,但插入操作效率很低。
顺序表是一种随即存取结构,存取任何一个元素的get()、set()方法的时间复杂度是O(1)。
对顺序表进行插入或删除操作是,算法所花费的时间主要用于移动元素。在等概率情况下,插入一个元素平均需要移动一半的元素,时间复杂度为O(n)。同里,删除一个元素的时间复杂度亦为O(n)。
综上所述,顺序表具有下列特点:
①:元素的物理存储顺序直接反映表中元素的逻辑顺序,可以随机存取元素。
②:插入和删除的操作效率很低。每插入或删除一个元素,可能需要移动大量元素,其平均移动次数是顺序表长度的一半。再者,数组容量不可更改,存在因容量小造成数据溢出,或因容量过大造成内存资源浪费的问题。解决数据溢出的方法是,申请另一个更大容量的数组,并进行数组元素复制,但插入操作效率很低。
转载于:https://www.cnblogs.com/ganchuanpu/p/7468527.html
线性表的顺序存储结构之顺序表类的实现_Java相关推荐
- 3、线性表的顺序存储结构(顺序表)
线性表的顺序存储结构简称为顺序表.线性表的顺序存储结构是把线性表中的元素中的元素按照其逻辑顺序依次存储到计算机存储器中指定位置开始的一块连续的存储空间中,它直接将线性表的逻辑结构映射到存储结构上,既 ...
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...
- 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码
数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...
- 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...
1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...
- 线性表的顺序存储结构——顺序表
什么是线性表? 线性表简称表,是n(n>=0)个具有相同类型的数据元素的有限序列,线性表中数据元素的个数称为线性表的长度,长度为0的表称为空表. 什么是顺序表? 线性表的顺序存储结构称为顺序表. ...
- 【数据结构】线性表的顺序存储结构及实现——C语言版
文章目录 顺序表 1. 顺序表的存储结构定义 2. 顺序表的实现 2.1 初始化顺序表 2.2 建立顺序表 2.3 销毁顺序表 2.4 判空操作 2.5 求顺序表的长度 2.6 遍历操作 2.7 按值 ...
- 线性表:2.线性表的顺序存储结构--顺序表及C语言实现
逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为 线性表的顺序存储结构 . 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中, ...
- 【数据结构】之线性表(顺序存储结构)
博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此 博主:威威喵 | 博客主页:https://blog.csdn.net/ ...
- 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表
线性表是数据结构中比较基础的内容,不过也是入门的所需要客服的第一个难关.因为从这里开始,就需要我们动手编程,这就对很多同学的动手能力提出了挑战.不过这些都是我们需要克服的阵痛,学习新的知识总是痛苦 ...
最新文章
- C++函数模板机制结论
- spring mvc学习(14) the superclass “javax.servlet.http.HttpServlet” was not found
- Java线程面试题,值得一看!
- websocket 发送图片_基于WebSocket的web端IM即时通讯应用的开发
- 数列分块入门 1(LibreOj-6277)
- mysql索引 order by_MySQL 通过索引优化含ORDER BY的语句
- 旧版台式计算机,7年前老电脑开机比拼 Windows8秒杀XP
- 补充轻量级持久层V2版本的测试页面模板与实体类模板
- Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来
- ajax的结果处理,jQuery ajax返回数据的后续处理
- 微信小程序获取二维码报错:{“errcode“:47001,“errmsg“:“data format error hint:“}
- (一)目标检测经典模型回顾
- 利用MATLAB计算输出响应,[笔记]离散系统的频率响应和输出响应的matlab实现.doc
- roundcube mysql_Webmail Roundcube安装配置
- 蓝牙、wifi、3G/4G、lora技术的对比
- SpringMVC学习-helloSpringMVC
- 图像单通道和4通道转3通道
- 自制紧张刺激的滑雪游戏,来一把?
- NAVEX:为动态Web应用程序生成精确且可扩展的漏洞
- Gradle搭建Spring5源码环境时报错:A build scan was not published as ... with server ‘ge.spring.io’