java实现顺序表结构

package com.hephec;

import java.util.Arrays;

public class SequenceList<T>{

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

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

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

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;

}

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("顺序线性表索引越界");

}

//将index处以后的所有元素向后移动一格

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 isEmpty(){

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();

}

}

}

时间: 2024-10-22 04:47:07

java实现顺序表结构的相关文章

闭关修炼中 *** Java常用算法之 -- 顺序表结构

给我的好姐姐聊聊天代码也打完了,小弟可是一心二用了,不过代码确实是挺长的. 代码打的时间长短不重要,重要的是理解~理解~理解.重要的事说三遍!!! 每天的重复,恨不得一天过成两天马上结束了,能多学点是点了. 山再高,咱能有耐心.同样如此~哈哈. 贴上代码吧: 1 import java.util.Scanner; 2 3 /***************************************** 4 * * 5 * 顺序结构 * 6 * * 7 ********************

Java算法 -- 顺序表

顺序表结构定义:就是按照顺序存储方式存储的线性表 1 1.定义一个顺序表的基本数据: 2 3 static final int MAXLEN = 100; 4 5 Class Student{ 6 private String number; //学生学号 7 private String name; // 学生姓名 8 private int age; // 学生年龄 9 } 10 11 Class SLT{ 12 Student[] ListData = new Student[MAXLEN

C#(数据结构):1.顺序表结构(2)

人生总有那么多未完的篇章,但是有时候今天你没完成的可能你以后再也不会完成.承诺的一切兴许也变成了过眼云烟.想抓住,握紧的拳头却使他们溜的更快.人生恰如初见,几多的欣喜. ----------------------------------------------------------------------------------------------万恶的分割线------------------------------------------------ 分割线都受不了了.好吧之前我们说

C#(数据结构):1.顺序表结构

我们程序员有三大优点:懒.困.自负.很荣幸我这三点都占了.但是木有关系这丝毫动摇不了我学习的决心.因为技术没有止境. -------------------------------------------------------------------------------------万恶的分割线------------------------------------------------------ 一个人生的分割线. 曾多少次我告诉自己要和昨天的自己说再见.不带走自己的过去,新中幻想着永

C#(数据结构):1.顺序表结构(3)

程序员的道路艰难险阻,如果有新生派的小学生问我他可以做程序员吗?我会毫不犹豫的告诉他放下程序立地成佛,千万不要踏足这一行.虽然这行妹子很多,但是勿来,勿入,勿学.不要问我为什么,说多了全是泪... -----------------------------------------------------------------------------------万恶的分割线------------------------------------------------- 好吧情感戏也就这么多了,

JAVA模拟顺序表新增,模拟单链表新增

最近在回顾大学学的数据结构,这里给大家用java模拟顺序表和单链表的新增 1顺序表新增 /** * 顺序表 * * @author cjd * */ public class ArrayList { private Object[] elementData; // 底层是一个数组,目前还没有确定长度 private int size; // 不是数组分配了几个空间,而是元素的个数 public ArrayList() { this(4); } public ArrayList(int initi

java数据结构和算法------线性表(顺序表结构)

1 package iYou.neugle.list; 2 3 public class MySeqList<T> { 4 private int initMaxSize = 10; 5 private T[] list; 6 private int listLen = 0; 7 8 public MySeqList() { 9 this.Init(); 10 } 11 12 public MySeqList(int size) { 13 this.initMaxSize = size; 14

Java实现顺序表

利用顺序存储结构表示的顺序表称为顺序表. 它用一组连续的地址存储单元一次存放线性表中的数据元素. 顺序表的实现是数据结构中最简单的一种. 由于代码中已经有详细注释,代码外不再阐述. 下次再陈上关于顺序表的循环队列和顺序栈的代码. 1 package 线性表.顺序表.普通数组; 2 3 /** 4 * ArrayList 顺序表 5 * JAVA 3.0 6 * 抛异常处理错误的下标 7 * 使用泛型,当然如果要替换成Object也是可以替换 8 */ 9 public class ArrayLi

线性表 及Java实现 顺序表、链表、栈、队列

数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至少在一段时间之后,技术可以很快得到提高.同时,它也是软考的重点,我们需要对这部分的内容进行一下总结. 我们先看一下数据结构和算法的整体内容. 1.线性表 概念: 数据元素的排列方式是线性的. 分类: 分类规则是根据上图中元素的存储结构来划分的. (1)顺序表 基本思想:元素的存储空间是连续的.在内