(1)顺序线性表(Java)
来源:互联网 发布:minecraft 下载 编程 编辑:程序博客网 时间:2024/06/05 08:54
线性表的顺序存储结构是指用一组地址连续的存储单元依次存放线性表的元素,线性表中相邻元素ai和ai+1对应的存储地址loc(al)和loc(ai+1)也是相邻的
线性表的基本操作有:
①初始化:通常一个构造器,用于创建一个空的线性表;
②返回线性表的长度;
③获取指定索引处的元素;
④按值查找数据元素的位置;
⑤直接插入数据元素;
⑥向指定位置插入数据元素;
⑦直接删除数据元素 ;
⑧删除线性表中指定位置的数据元素;
⑨判断线性表是否为空;
⑩清空线性表。
顺序线性表的一个简单的源代码版本,这个实现了ArrayList部分功能,但是它是线程不安全的,在单线程下工作正常,但是多线程环境中可能引起线程安全问题:
package com.xuan.datastructs;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++;}/** * 以指定长度的数组来创建顺序线性表 * @param element 指定顺序线性表中第一个元素 * @param initSize 指定顺序线性表底层数组的长度 */public SequenceList(T element,int initSize){capacity=1;//把capacity设为大于initSize的最小的2的n次方while(capacity<initSize){capacity<<=1;//复合运算符,比如:a<<=b,意思就是a = a*(2的b次方)}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 locat(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);//将指定索引处之后的元素向后移动一格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大于minCapacitywhile(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);//调用上面的删除最后一个元素的方法,即删除size-1的元素即可}//判断顺序线性表是否为空表public boolean empty(){return size==0;}//清空线性表public void clear(){//将底层数组所有元素赋为nullArrays.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();}}//测试public static void main(String[] args) {SequenceList<String> list=new SequenceList<String>();list.add("aaaa");list.add("bbbb");list.add("cccc");//在索引为1处插入一个新元素list.insert("dddd", 1);//输出顺序线性表中的元素System.out.println(list);//删除索引为2处的元素list.delete(2);System.out.println(list);//获取cccc字符串在顺序线性表中的位置System.out.println("cccc在顺序线性表中的位置:"+list.locat("cccc"));}}
0 0
- (1)顺序线性表(Java)
- Java实现线性表(顺序表)
- 线性表-顺序存储(Java数据结构)
- 线性表线性(顺序)存储结构
- Java数据结构(二):线性表之顺序表
- java(数组实现)线性表中顺序表
- 线性表的顺序存储结构(java版)
- 线性表的顺序存储结构(java版)
- 数据结构-线性表之顺序储存(Java实现)
- 顺序线性表 代码实现(基于java)
- 数据结构-线性表之顺序储存(Java实现)
- 线性表1---顺序表
- 线性表1-顺序表
- 线性表(顺序表)
- 顺序线性表-数据结构(1)
- 顺序线性表(一)
- Java数据结构-线性表(顺序表)
- 数据结构Java 线性表与顺序表
- shell创建新文件夹
- 俄罗斯方块(2013.9.27)
- 类和对象的概念和区别
- perl在linux下通过date获取当前时间
- 位图索引(Bitmap Index)
- (1)顺序线性表(Java)
- 函数索引使用之部分记录建索引
- Uncaught Error: Bootstrap's JavaScript requires jQuery
- where would you go this weekend?...
- 杭电 2553 N皇后问题
- JavaWeb入门实战—EL表达式&JSTL标签
- 第4周作业-打字成绩判断程序
- where would you go this weekend?(2013.10.20)
- 环境搭建