Java数据结构的线性表是怎样的

    Java   数据结构——线性表的顺序     存储   实现

一、描述

线性结构特点:

(1)存在唯一的一个被称作“第一个”的数据元素

(2)存在唯一的一个被称作“最后一个”的数据元素

(3)除第一个之外,集合中的每个数据元素均只有一个前驱

(4)除最后一个之外,集合中的每个数据元素均只有一个后继

线性表:是n个数据元素的有限序列。常用的两种存储结构为:线性表的顺序存储结构和线性表的链式存储结构。

 Java数据结构的线性表是怎样的_设计制作_RF/无线

线性表的顺序表示:指的是用一组地址连续的存储单元依次存储线性表的数据元素。

本篇主要讲线性表的顺序存储。 二、源码

2.1 SequenceList.java

package com.yds.list;

import java.u     ti   l.Arrays;

public class SequenceList《T》{

//默认长度

priva     te   int DEFAULT_SIZE = 2;

//定义一个数组用于保存线性表的长度

private Object[] elementData;

//用于保存数组长度

private int capacity;

//保存顺序表中当前元素的个数

private int size = 0;

/**

* 构造一个默认长度的空线性表

*/

public SequenceList(){

capacity = DEFAULT_SIZE;

elementData = new Object[capacity];

}

/**

* 用一个初始化元素来创建线性表

* @pa     ram   element 初始化元素

*/

public SequenceList(T element){

this();

elementData[0] = element;

size++;

}

/**

* 用一个元素和指定长度来创建线性表

* @param element 元素

* @param initSize 指定长度

*/

public SequenceList(T element,int initSize){

capacity = 1;

    if   (capacity《initSize){

capacity = initSize +2;

}

elementData = new Object[capacity];

elementData[0] = element;

size++;

}

/**

* 向顺序表中插入元素

* @param element 待插入的元素

* @param index 待插入的位置

*/

public void insert(T element,int index){

if(index《0||index》size){

throw new IndexOutOfBoundsExcep  TI on(“数组越界异常”);

}

ensureCapacity(size+1);

//把index以后的元素都后移一位

System.arraycopy(elementData, index, elementData, index+1, size-index);

elementData[index] = element;

size++;

}

/**

* 表长

* @return

*/

public int length(){

return size;

}

/**

* 向表中添加元素

* @param element

*/

public void add(T element){

insert(element, size);

}

/**

* 得到线性表存储的对象

* @param index 获得的位置

* @return 得到的结果

*/

public T get(int index){

if(index《0||index》size)

throw new IndexOutOfBoundsExcep  TI on(“数组越界异常”);

return (T)elementData[index];

}

/**

* 判断线性表是否为空

* @return

*/

public boolean isEmpty(){

return size==0;

}

/**

* 清空线性表

*/

public void clear(){

Arrays.fill(elementData, null);

size = 0;

}

/**

* 获取指定位置的前一个元素

* @param index 线性表位置,若是取线性表最后一个元素,必须index = size,

* size为线性表元素个数

* @return

*/

public T priorElem(int index){

if(index》0&&index《size+1)

return (T)elementData[index-1];

else {

throw new IndexOutOfBoundsExcep  TI on(“数组越界异常”);

}

}

/**

* 删除指定位置的元素

* @param index

*/

public void delete(int index){

if(index《0||index》size-1){

throw new IndexOutOfBoundsExcep  TI on(“数组越界异常”);

}else{

//把数组前移一位

System.arraycopy(elementData, index+1, elementData, index, size-index-1);

size--;

//清空最后一个元素

elementData[size]=null;

}

}

/**

* 获取指定线性表位置的后一个元素

* @param index 线性表位置,若是取线性表第0个元素,必须index=-1

* @return

*/

public T nextElem(int index){

if (index==-1) {

return (T)elementData[0];

}

else if (index《size-1&&index》-1) {

return (T)elementData[index+1];

}else{

throw new IndexOutOfBoundsException(“数组越界异常”);

}

}

/**

* 确保数组所需长度大于数组原有长度

* @param mCapacity 数组所需长度

*/

private void ensureCapacity(int mCapacity){

if(mCapacity》capacity){

capacity=mCapacity+2;

// System.out.println(“capacity:”+capacity);

elementData = Arrays.copyOf(elementData, capacity);

}

}

}

2.2 JavaM     ai   n.java

package com.yds.list;

public class JavaMain {

public static void main(String[] args) {

// TODO Auto-generated method stub

SequenceList《String》 list = new SequenceList《String》();

System.out.println(“isEmpty:”+list.isEmpty());

String La[] = {

“3”

};

for (int i = 0; i 《 La.length; i++) {

list.add(La[i]);

}

System.out.println(“isEmpty:”+list.isEmpty());

for (int i = 0; i 《 La.length; i++) {

System.out.println(list.get(i));

}

System.out.println(“length:”+list.length());

System.out.println(“priorElem:”+list.priorElem(1));

list.insert(“7”, 0);

System.out.println(“--------------------”);

for (int i = 0; i 《 list.length(); i++) {

System.out.println(list.get(i));

}

System.out.println(“length:”+list.length());

System.out.println(“--------------------”);

System.out.println(“priorElem:”+list.priorElem(1));

System.out.println(“nextElem:”+list.nextElem(0));

System.out.println(“--------------------”);

list.delete(1);

for (int i = 0; i 《 list.length(); i++) {

System.out.println(list.get(i));

}

list.clear();

System.out.println(“isEmpty:”+list.isEmpty());

System.out.println(“----------SequenceList(T element)----------”);

SequenceList《String》 list1 = new SequenceList《String》(“5”);

for (int i = 0; i 《 La.length; i++) {

list1.add(La[i]);

}

for (int i = 0; i 《 list1.length(); i++) {

System.out.println(list1.get(i));

}

System.out.println(“-------SequenceList(T element,int initSize)--------”);

SequenceList《String》 list2 = new SequenceList《String》(“5”,3);

for (int i = 0; i 《 La.length; i++) {

list2.add(La[i]);

}

for (int i = 0; i 《 list2.length(); i++) {

System.out.println(list2.get(i));

}

}

责任编辑:ct

50
147
0
46

相关资讯

  1. 1、5G承载致光模块价格飙升成为业界热议的话题,高成本源于生技术250
  2. 2、MagicLeapOne内部光学设计大揭秘?3035
  3. 3、Vayyar推出其全球最先进毫米波3D成像CMOS系统级芯片2047
  4. 4、苹果已在韩申请34项Micro-LED专利?1648
  5. 5、赛特斯提出5G质能方程式全新战略,发布FlexORAN2000产品4146
  6. 6、南芯半导体完成近亿元B轮融资,推进中国高端芯片的本土化进程1042
  7. 7、5G+AI成“爆发点”,东莞石碣电子信息产业抢占5G高地3614
  8. 8、2019未来科学大奖获奖者公布密码学家王小云成首位女性获奖者1696
  9. 9、浪潮与中国电信签署5G合作备忘录,加快5G商用步伐3442
  10. 10、RFID手持终端结合仓储管理系统的优势601
全部评论(0)
我也有话说
0
收藏
点赞
顶部