线性表的顺序存储结构——java
线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素。为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问。java中ArrayList类是线性表的数组实现。
下面是自己模仿ArrayList实现的最简单的线性表的顺序存储功能
import java.util.Arrays;
//线性表的顺序存储 抽象类的实现
public class SequenceList<T> {
private int DEFAULT_SIZE = 10;
//保存数组的长度
private int capacity;
//定义一个数组用于保存顺序线性表的元素
private Object[] elementData;
//保存顺序表中元素的当前个数
private int size;
//以默认数组长度创建空顺序线性表
public SequenceList(){
capacity = DEFAULT_SIZE;
elementData = new Object[capacity];
}
//以一个初始化元素来创建顺序线性表
public SequenceList(T element){
this();
elementData[0] = element;
size++;
}
//以指定长度的数组来创建顺序线性表
public SequenceList(T element, int initSize){
capacity = DEFAULT_SIZE;
//把capacity设置为大于initSize的最小的1.5的n次方
while(capacity < initSize){
capacity = capacity + capacity >> 1;
}
elementData = new Object[capacity];
elementData[0] = element;
size++;
}
//判断顺序线性表是否为空
public boolean empty(){
return size == 0;
}
//清空线性表
public void clear(){
Arrays.fill(elementData , null);
/*等价于
for(int i=0;i<size;i++){
elementData[i] = null;
}
*/
size = 0;
}
//获取顺序线性表中索引为i处的元素
public T get(int i){
if(i<0 ||i>size-1){
throw new IndexOutOfBoundsException("线性表索引越界");
}
return (T) elementData[i];
}
//查找顺序线性表中指定元素的索引
public int locate(T element){
for(int i=0;i<size;i++){
if(elementData[i].equals(element)){
return i;
}
}
return -1;
}
//获取线性表的大小
public int length(){
return size;
}
//向顺序线性表中的指定位置插入一个元素
public void insert(T element, int index){
if(index <0 || index > size){
throw new IndexOutOfBoundsException("线性表索引越界");
}
ensureCapacity(size + 1);
//将index处以后的所有元素向后移动一格
System.arraycopy(elementData, index, elementData, index+1, size - index);
elementData[index] = element;
size++;
}
//动态增加容量
private void ensureCapacity(int minCapacity){
//如果数组原有的长度小于目前所需要的长度
if(minCapacity > capacity){
while(minCapacity > capacity){
capacity = capacity + capacity >> 1;
}
elementData = Arrays.copyOf(elementData, capacity);
}
}
//在顺序线性表的最后添加一个元素
public void add(T element){
ensureCapacity(size + 1);
elementData[size++] = element;
}
//删除顺序线性表中指定索引处的元素
public T delete(int index){
if(index < 0 || index < size){
throw new IndexOutOfBoundsException("线性表索引越界");
}
T oldValue = (T) elementData[index];
int numMoved = size -index - 1;
if(numMoved > 0)
System.arraycopy(elementData, index + 1, elementData, index, numMoved);
//清空最后一个元素
elementData[--size] = null;
return oldValue;
}
//点出顺序线性表的最后一个元素
public T remove(){
return delete(size-1);
}
}
线性表的顺序存储结构——java的更多相关文章
- 2.2_线性表的顺序存储结构_参考集合ArrayList
[线性表的顺序存储从结构] 指的是用一段连续的存储单元一次储存线性表的数据元素. [线性表的顺序存储的结构代码 C语言版] #define MAXSIZE 20 /*存储空间初始分配量*/ typed ...
- C++编程练习(1)----“实现简单的线性表的顺序存储结构“
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素. 故可以用数组来实现顺序存储结构. 用C++编写的利用数组实现简单的读取.插入和删除功能的线性表. #include< ...
- 线性表的顺序存储结构之顺序表类的实现_Java
在上一篇博文——线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构——顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...
- 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现
逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...
- c数据结构 -- 线性表之 顺序存储结构 于 链式存储结构 (单链表)
线性表 定义:线性表是具有相同特性的数据元素的一个有限序列 类型: 1:顺序存储结构 定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构 算法: #include <stdio. ...
- 线性表之顺序存储结构(C语言动态数组实现)
线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...
- c语言数据结构之线性表的顺序存储结构
线性表,即线性存储结构,将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构,简称线性表. 注意:使用线性表存储的数据,要求数据类型必须一致,线性表存储的数据,要么全不 ...
- 【Java】 大话数据结构(1) 线性表之顺序存储结构
本文根据<大话数据结构>一书,实现了Java版的顺序存储结构. 顺序存储结构指的是用一段地址连续的存储单元一次存储线性表的数据元素,一般用一维数组来实现. 书中的线性表抽象数据类型定义如 ...
- 线性表 linear_list 顺序存储结构
可以把线性表看作一串珠子 序列:指其中的元素是有序的 注意last和length变量的内在关系 注意:将元素所占的空间和表长合并为C语言的一个结构类型 静态分配的方式,分配给一个固定大小的存储空间之后 ...
随机推荐
- android 13 5种click事件不同实现方式 比较
第一种:不便于管理. <Button android:id="@+id/btn_Gridlayout" android:layout_width="match_pa ...
- APUE16章的运行示例16-14
参考文章:http://blog.csdn.net/andyxie407/article/details/1672325 今天在运行在APUE第16章的16-14(客户端)和16-15(服务端)遇到了 ...
- Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源用户访问控制
软件版本: Tomcat 7.0.40 Mysql: 5.1 Host: CentOS 6.3 64bit 使用JDBCRealm (Tomcat 会使用所给的JDBC Connecter 自己去连M ...
- javascript中涉及到汉字的比较
在使用js中的"=="进行字符串的比较时,发现在英文情况下是ok的,但在中文比较时则不行了. 在网上搜索,提供了一个解决方法,使用 stringObject.localeCompa ...
- block没那么难(三):block和对象的内存管理
本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 ...
- php代码优化技巧
搬运: 1. 尽量采用大量的PHP内置函数. 2. echo 比print 快. 3. 不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码? 4. 在执行for循环之前确定最大循环数,不要每循环 ...
- C# 二叉查找树实现
BuildTree 代码1次CODE完,没有BUG. 在画图地方debug了很多次.第一次画这种图. 一开始用treeview显示,但发现不是很好看出树结构,于是自己动手画了出来. using Sys ...
- OpenWrt启动过程分析
openwrt是通过一系列shell脚本进行启动流程的组织,下面是启动流程的提纲.如 果想详细了解启动的过程,则需要仔细走读脚本文件. 1. 在make menuconfig 选择target平台 B ...
- ado.net与各种orm操作数据方式的比较
ADO.NET与ORM的比较(1):ADO.NET实现CRUD http://zhoufoxcn.blog.51cto.com/792419/283952 ADO.NET与ORM的比较(2):NHib ...
- tomcat的webapp下的root文件夹的作用是什么
1.基本一样..只是表示不同的tomcat的http路径而已. root目录默认放的是tomcat自己的一个项目,如:http://localhost:8080/默认访问root项目 对于webapp ...