百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

java中我们错过的数据结构——线性表的顺序存储结构

toyiye 2024-09-07 00:39 3 浏览 0 评论

图片来自互联网

数据结构

研究应用程序数据之间的逻辑关系,存储方式及其操作,还要分析各种数据结构在时间开销,空间开销的优劣。

数据元素之间存在的关联关系被称为数据的逻辑结构,应用程序中的逻辑结构大致有4中:

  1. 集合:数据元素之间只有“同属一个集合”的关系。

  2. 线性结构:数据元素之间存在一个对一个的关系。

  3. 树形结构:数据元素之间存在一个对多个的关系。

  4. 图状结构或网状结构:数据元素之间存在多个对多个的关系。

而对于数据不同的逻辑结构,计算机在物理磁盘上有两种物理存储结构:

  • 顺序存储结构

  • 链式存储结构


线性结构——线性表的顺序存储结构

线性表的顺序存储结构是指用一组地址连续的存储单元一次存放线性表的元素。

当程序采用顺序存储结构来实现线性表时,线性表中相邻元素对应的存储地址也是相邻的。

用java实现顺序线性表代码如下:

import java.util.Arrays;

/**

* 线性表

* 定义:线性表是由n(n>=0)个数据元素(节点)a1,a2,...an组成的有限序列

*

* @author LENOVO

*

*/

public class SequenceList<T> {

private int DEFAULT_SIZE = 16;

//保存数组长度

private int capacity;

//定义一个数组用于保存顺序线性表的元素

private Object[] elementData;

//保存顺序表中当前元素的个数

private int size = 0;

//以默认数组长度创建空顺序线性表

public SequenceList() {

capacity = DEFAULT_SIZE;

elementData = new Object[capacity];

}

//以初始化元素创建顺序线性表

public SequenceList(T element){

this();

elementData[0] = element;

size++;

}

/**

* 以指定长度的数组来创建顺序线性表

* @param element 指定顺线性表中的第一个元素

* @param initsize 指定顺序线性表底层数组的长度

*/

public SequenceList(T element,int initsize){

capacity = 1;

//吧capacity设为大于initsize的最小的2的n次方

while(capacity<initsize){

capacity<<=1;

}

elementData = new Object[capacity];

elementData[0] = element;

size++;

}

/**

* 获取顺序线性表的大小

* @return

*/

public int length(){

return size;

}

/**

* 获取顺序线性表中索引为i处的元素

* @param i

* @return

*/

public T get(int i){

if(i<0||i>size-1){

throw new IndexOutOfBoundsException("线性表索引越界");

}

return (T)elementData[i];

}

/**

* 查找顺序线性表中指定元素的索引

* @param element

* @return

*/

public int locate(T element){

for(int i=0;i<size;i++){

if(elementData[i].equals(element)){

return i;

}

}

return -1;

}

/**

* 向顺序线性表中指定位置插入一个元素

* @param element

* @param index

*/

public void insert(T element,int index){

if(index<0||index>size){

new IndexOutOfBoundsException("线性表索引越界");

}

ensureCapacity(size+1);

//将指定索引处之后的所有元素都向后移动

System.arraycopy(elementData, index, elementData, index+1, size-index);

elementData[index] = element;

size++;

}

/**

* 在顺序线性表的开始处添加一个元素

* @param element

*/

public void add(T element){

insert(element,size);

}

/**

* 扩充数组长度

* @param minCapacity

*/

private void ensureCapacity(int minCapacity) {

//如果数组原有长度小于目前所需要长度

if(minCapacity>capacity){

//不断的将capacity乘以2直到capacity大于minCapacity

while(capacity<minCapacity){

capacity<<=1;

}

elementData = Arrays.copyOf(elementData, capacity);

}

}

/**

* 删除指定索引处的元素

* @param index

* @return

*/

public T delet(int index){

if(index<0||index>size-1){

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;

}

/**

* 删除线性表中最后一个元素

* @return

*/

public T remove(){

return delet(size-1);

}

/**

* 判断线性表是否为空

* @return

*/

public boolean empty(){

return size==0;

}

/**

* 清空线性表

*/

public void clear(){

//将底层数组所有元素赋值为null;

Arrays.fill(elementData, null);

size = 0;

}

public String toString(){

if(size==0){

return "[]";

}else{

StringBuilder sb = new StringBuilder("[");

for(int i=0;i<size;i++){

sb.append(elementData[i].toString()+",");

}

int len = sb.length();

return sb.delete(len-1, len).append("]").toString();

}

}

}

测试类及运行结果如图:

从运行结果上看SequenceList类实现了部分ArrayList类的功能,其实就是简化版的ArrayList。

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码