线性表--顺序储存结构 java实现
来源:互联网 发布:淘宝客乱扣佣金 编辑:程序博客网 时间:2024/05/15 16:17
1、线性表:由n(n>=0)个数据元素组成的有限序列。
对于一个非空、有限的线性表,总具有如下特征:
(1)总存在唯一的第一个数据元素
(2)总存在唯一的最后一个数据元素
(3)除第一个数据元素外,集合中的每一个数据元素都只有一个前驱的数据元素
(4)除最后一个数据元素外,集合中的每个数据元素都只有一个后继的数据元素
顺序存储结构:
是指用一组地址连续的存储单元一次存放线性表的元素。
为了使用顺序存储的线性表,程序通常采用数组来保存线性表中的元素。顺序存储的线性表是一种随机存储的储存结构。
import java.util.Arrays;public class ArrayList<T>{ private int DEFAULT_SIZE = 10;//数组默认长度 private int capacity;//保存数组的长度 private Object[] elementData;//数组对象的引用 private int size = 0;//保存顺序表中当前元素的个数 public ArrayList()//构造器 以默认数组长度创建顺序线性表 { capacity = DEFAULT_SIZE;//线性表默认长度为10 elementData = new Object[capacity]; } public ArrayList(T element)//以一个初始化元素创建一个顺序线性表 { this(); elementData[0]=element; size++; } public ArrayList(int initSize)//指定长度的数组来创建顺序线性表 { capacity = 1; while(capacity < initSize) { capacity <<= 1; } elementData = new Object[capacity]; } //获取线性表的长度 public int length() { return size; } //获取指定位置的元素 public T getElement(int index) { if(index < 0 || index > size-1) { throw new IndexOutOfBoundsException("索引越界"); } return (T)elementData[index]; } //查找 //查找 指定元素的位置 public int locateByElement(T element) { for(int i = 0;i < size ;i++) { if(elementData[i] == element) { return i; } } return -1; } //插入 //向指定位置插入一个元素 public void insert(T element,int index) { if(index < 0 || index > size) { throw new IndexOutOfBoundsException("索引越界"); } ensureCapacity(size + 1);//插入之前判断现在的数组容量是否已满 //数组的复制 将指定索引处的之后的元素向后移动一格 System.arraycopy(elementData,index,elementData,index+1,size-index);//从插入的位置开始复制直到最后一个元素 //移动之后空出来的index的位置插入element elementData[index] = element; size++; } //在表尾插入元素 public void add(T element) { insert(element,size); } //检查是否需要对数组进行扩容,如果需要则对其扩容 原来数组中的元素及其职位保持不变 public void ensureCapacity(int minCapacity) { if(capacity < minCapacity)//如果当前的数组容量小于传进来的参数 则需要对数组进行扩容 { while(capacity < minCapacity) { capacity <<= 1;//让capacity每次右移一位直到capacity大于传进来的参数 } elementData = Arrays.copyOf(elementData,capacity);//对数组原来的内容进行拷贝并赋予其新的容量 //Arrays的copyOf()方法传回的数组是新的数组对象,第二个参数指定新的数组容量 } } //删除指定位置的元素 public T delete (int index) { if(index < 0 || index > size-1) { throw new IndexOutOfBoundsException("索引越界"); } T deleteElement = (T)elementData[index];//找到要删除的元素 int move = size - index -1;//从index+1直到最后一个的总长度 System.arraycopy(elementData,index+1,elementData,index,move); elementData[--size] = null;//清空最后一个元素的引用 return deleteElement; } //判断线性表是否为空 public boolean isEmpty() { return size == 0; } //清空线性表 public void clearAll() { Arrays.fill(elementData,null);//第一个参数是一个数组变量,第二个参数是将数组中的所有值变为同一个value size = 0; } //重写toString方法 @Override public String toString() { if(isEmpty()) { 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(); } } }
测试
public class ArrayListTest<T>{public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("hello"); list.add("world"); list.add("java"); System.out.println(list); list.insert("111",1); System.out.println(list); list.delete(2); System.out.println(list); list.clearAll(); System.out.println(list); }}结果:
[hello, world, java]
[hello, 111, world, java]
[hello, 111, java]
[]
0 0
- 线性表--顺序储存结构 java实现
- 线性表--顺序储存结构
- 线性表的顺序储存结构(静态)实现
- 线性表的顺序储存结构定义(动态)实现
- 数据结构 线性表的顺序储存结构
- 数据结构-线性表之顺序储存(Java实现)
- 数据结构-线性表之顺序储存(Java实现)
- 线性结构--->循环队列的顺序储存实现
- 线性表的顺序储存及运算实现-------------顺序表
- 线性表的顺序储存结构 初始化、查找、删除、插入
- 数据结构中线性表的顺序储存结构
- 线性表的顺序储存结构(向量 )(一)
- 数据结构 --- 线性表 顺序储存 链式储存
- 数据结构之线性结构---栈 顺序储存
- 数据结构之线性结构---队列 顺序储存
- 线性表的顺序储存
- 线性表的顺序储存
- 线性表的顺序储存及运算实现
- Mysql优化方案一之缓存与分区
- python【1】Python中常用的快捷键和BIF
- Java SE 6.0学习笔记——面向对象
- BurpSuite抓HTTPS数据
- JavaWeb防止表单重复提交
- 线性表--顺序储存结构 java实现
- XTU 1179 Shortest Path
- 在Google Chrome中快速解除网页屏蔽鼠标右键、复制等限制
- BigDecimal类的加减乘除
- 环境搭建基础知识0(Word无法切换中文输入法的解决方法)
- 正则中需要转义的特殊字符小结
- CSS 之 display:table
- Oracle获取时间或者月份列表
- Java基本数据类型