顺序结构存储实现

package com.kiger.Sequence;import java.util.Arrays;/*** @ClassName SequenceList* @Description 线性表顺序存储实现* @Author zk_kiger* @Date 2019/6/18 20:36* @Version 1.0*/public class SequenceList<T> {// 默认初始化数组大小为16private final int DEFAULT_SIZE = 16;// 数组容量private int capacity;// 定义一个数组,用于保存线性表private Object[] elementData;// 保存顺序表中元素的个数private int size = 0;/*** 以默认容量创建空的线性表*/public SequenceList() {capacity = DEFAULT_SIZE;elementData = new Object[capacity];}/*** 以一个初始化元素创建默认容量的线性表** @param element 初始化元素*/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 索引i的元素*/public T get(int i) {if (i < 0 || i > size - 1) {throw new IndexOutOfBoundsException("索引超出线性表范围");}return (T) elementData[i];}/*** 根据元素查找在线性表中的索引** @param element 查找元素* @return 索引*/public int indexOf(T element) {for (int i = 0; i < size; i++) {if (element.equals(elementData[i])) {return i;}}return -1;}/*** 在顺序表指定索引处插入元素** @param element 插入元素* @param index   指定索引*/public void insert(T element, int index) {if (index < 0 || index > size) {throw new IndexOutOfBoundsException("索引超出线性表范围");}// 让数组容量扩大ensureCapacity(size + 1);// 调用System.arraycopy(),让数组index及后面的数据向后移动一位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 所需的最小容量*/public void ensureCapacity(int minCapacity) {// 如果需要的数组容量大于当前数组容量if (minCapacity > capacity) {while (capacity < minCapacity) {capacity <<= 1;}}// 调用Arrays.copyOf()可以让系统重新生成一个数组,并将引用赋给elementDataelementData = Arrays.copyOf(elementData, capacity);}/*** 删除指定索引的元素** @param index 索引* @return 删除元素*/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) {// 将index之后的元素向前移动一位System.arraycopy(elementData, index + 1, elementData, index, numMoved);}//让顺序表最后一位为空elementData[--size] = null;return oldValue;}/*** 删除最后一个元素** @return 删除元素*/public T remove() {return delete(size - 1);}/*** 判断线性表是否为空*/public boolean isEmpty() {return size == 0;}/*** 清空线性表*/public void clear() {// 将所有元素变为nullArrays.fill(elementData, null);size = 0;}@Overridepublic 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();}}
}

测试代码

package com.kiger.Sequence;import org.junit.Test;/*** @ClassName SequenceListTest* @Description 测试* @Author zk_kiger* @Date 2019/6/18 21:30* @Version 1.0*/public class SequenceListTest {@Testpublic void test() {SequenceList<String> sList = new SequenceList<>();// 添加元素sList.add("w");sList.add("s");sList.add("z");System.out.println(sList);// 指定位置插入sList.insert("lala", 1);System.out.println(sList);// 指定位置删除sList.delete(0);System.out.println(sList);// 获取指定位置元素System.out.println(sList.get(1));// 清空sList.clear();System.out.println(sList);}
}

线性表顺序存储 - Java实现相关推荐

  1. 使用Java模拟线性表顺序存储结构

    在数据结构中,线性表分两种结构 顺序结构和链表结构 下面使用Java模拟一下顺序结构 主要难点在顺序结构的插入和删除 import java.util.ArrayList;//线性表顺序存储结构 pu ...

  2. 数据结构例程——线性表顺序存储的应用

    本文是数据结构基础系列网络课程(2):线性表中第6课时线性表顺序存储的应用中所讲的例程. 例:删除元素 问题:已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素. 要求 ...

  3. python线性表顺序存储实现_数据结构——基于C的线性表的顺序存储结构的基本操作的实现...

    /*** *SeqList.c *Copyright (c) 2015, XZG. All rights reserved. *Purpose: * 线性表顺序存储结构的创建.数据插入.数据获取.获取 ...

  4. 第三章 线性表---顺序存储结构

    线性表(List):零个或多个数据元素的有限序列. 若将线性表记为(a1, ..., ai-1, ai , ai+1 , ..., an),则表中 ai-1 领先于ai , ai领先于ai+1,称ai ...

  5. 线性表顺序存储的基本操作方法(C语言)

    好久没有用C了,呵呵,差不多有2年了,哎,当时努力学C的时候还是因为考研的呢,考上之后就再没有用了.现在重新拿起,感觉不一样. 来个简单的,实现严蔚敏版数据结构中ADT规定的基本操作: 首先一个定义常 ...

  6. 线性表 :: 顺序存储结构的实现

    线性表 :: 顺序存储结构的实现 说明:本文属于读书笔记.笔者将以讲述的方式表达全片文章.故文中提到的某些字词是非正式术语,只是笔者本人的理解性词语. 线性表简介:想要了解点击此处 目录 顺序存储结构 ...

  7. 线性表顺序存储的一些操作(初始化,添加,删除)

    最近有时间学一些自己想学的,就找来看看数据结构.看的是大话数据结构.之前学数据结构是大一时候,现在看这个还可以,没那时候学的累.但是还是需要进行一些总结,以免自己会忘记. 虽然大部分和书上差不多,但是 ...

  8. 数据结构—线性表顺序存储插入和删除操作

    线性表的操作:1.InitList(*L):初始化操作,建立一个空的线性表L 2.ListEmpty(L):判断线性表是否为空,如果为空,返回true,否则返回false 3.ClearList(*L ...

  9. 线性链表java实现_线性表的Java实现--链式存储(双向链表)

    线性表的Java实现--链式存储(双向链表) 有了单向链表的基础,双向链表的实现就容易多了. ? 双向链表的一般情况: ? ? class="decoded" alt=" ...

最新文章

  1. Windows 10 安装
  2. linux 大文件切割和合并 tar分割和合并
  3. 全球及中国嵌入式家电行业销售格局及竞争策略研究报告2021-2027年版
  4. jQuery Validate 提交表单验证失败扩展方法
  5. pd17虚拟机 mac 无限使用
  6. Java笔记-按行读取文件及一次性全部读取数据
  7. 引擎设计跟踪(九.6) 地形最近更新
  8. 预充电电路工作原理_变频冰箱开关电源电路工作原理及检修思路
  9. SPF,DSPF,RDPF,SPEF and SBPF.
  10. 独立事件、笛卡尔积与矩阵向量乘法
  11. item 12: 把重写函数声明为“override”的
  12. Ant运行build.xml执行服务器scp,异常解决jsch.jar
  13. 网络流24题 洛谷 2763 试题库问题
  14. Oracle数据库日志清理
  15. PyTorch 音频处理教程
  16. 通过vdi备份linux,Virtualbox复制(备份)带多个Snapshots的Vdi
  17. MVC 模式已死?何不试试 MOVE
  18. STL ++iter与iter++区别
  19. 那些短,却叫人很心疼的句子(转)
  20. 滴滴二面:Kafka是如何读写副本消息的?

热门文章

  1. 数据爬取与个人信息保护
  2. 推荐系统强化学习DRN
  3. Word入门动画教程5:制作稿纸(转)
  4. halcon模板匹配实践(1)算子参数说明与算子简介
  5. 输入127.0.0.1:8000/admin/登录不上
  6. vm linux终端访问桌面,启动虚拟机后进入linux操作系统,只有命令行没桌面,怎么在命令行启动桌面...
  7. Mac OS X 分区失败
  8. 打造Facebook(4):新人训练营
  9. community 计算模块度_【转载】金融风控反欺诈之图算法
  10. 聊天工具之在线IM服务比