今天就跟大家聊聊有关java中线性表的存储结构是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java数据结构学习笔记第一篇:用程序后在那个的数据大致有四种基本的逻辑结构:集合:
今天就跟大家聊聊有关java中线性表的存储结构是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
用程序后在那个的数据大致有四种基本的逻辑结构:
集合:数据元素之间只有"同属于一个集合"的关系
线性结构:数据元素之间存在一个对一个的关系
树形结构:数据元素之间存在一个对多个关系
图形结构或网状结构:数据元素之间存在多个对多个的关系
对于数据不同的逻辑结构,计算机在物理磁盘上通常有两种屋里存储结构
顺序存储结构
链式存储结构
本篇博文主要讲的是线性结构,而线性结构主要是线性表,非线性结构主要是树和图。
线性表的基本特征:
总存在唯一的第一个数据元素
总存在唯一的最后一个数据元素
除第一个数据元素外,集合中的每一个数据元素都只有一个前驱的数据元素
除最后一个数据元素外,集合中的每一个数据元素都只有一个后继的数据元素
线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素。为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问。java中ArrayList类是线性表的数组实现。
import java.util.Arrays;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++; } 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++; } //获取顺序线性表的大小 public int length() { return size; } //获取顺序线性表中索引为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 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++; } //在线性顺序表的开始处添加一个元素。 public void add(T element) { insert(element , size); } //很麻烦,而且性能很差 private void ensureCapacity(int minCapacity) { //如果数组的原有长度小于目前所需的长度 if (minCapacity > capacity) { //不断地将capacity * 2,直到capacity大于minCapacity为止 while (capacity < minCapacity) { capacity <<= 1; } elementData = Arrays.copyOf(elementData , capacity); } } //删除顺序线性表中指定索引处的元素 public T delete(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; } //删除顺序线性表中最后一个元素 public T remove() { return delete(size - 1); } //判断顺序线性表是否为空表 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 - 2 , len).append("]").toString(); } }}
--结束END--
本文标题: java中线性表的存储结构是什么
本文链接: https://www.lsjlt.com/news/223427.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0