Java实现顺序表

利用顺序存储结构表示的顺序表称为顺序表。

  它用一组连续的地址存储单元一次存放线性表中的数据元素。

顺序表的实现是数据结构中最简单的一种。

由于代码中已经有详细注释,代码外不再阐述。

下次再陈上关于顺序表的循环队列和顺序栈的代码。

  1 package 线性表.顺序表.普通数组;
  2
  3 /**
  4  * ArrayList 顺序表
  5  * JAVA 3.0
  6  * 抛异常处理错误的下标
  7  * 使用泛型,当然如果要替换成Object也是可以替换
  8  */
  9 public class ArrayList<E> {
 10
 11     private int capacity; //数组的总容量
 12     private int current;  //当前最后一个数组元素的下一个元素下标,从0开始,也是长度
 13     private E[] data = null; //所有数据
 14
 15     public ArrayList(){
 16
 17         this(10);
 18     }
 19
 20     public ArrayList(int initialSize){
 21
 22         init(initialSize);
 23     }
 24     /**
 25      * 初始化数组
 26      */
 27     @SuppressWarnings("unchecked")
 28     public void init(int initialSize){
 29
 30         current = 0;
 31         data = (E[])new Object[initialSize];
 32         capacity = initialSize;
 33     }
 34     /**
 35      * 数组末尾插入元素*/
 36     public void add(E e){
 37
 38         ensureCapacity();
 39         data[current] = e;
 40         current++;
 41
 42     }
 43     /**
 44      * 在数组中插入元素*/
 45     public void insert(int index, E e){
 46
 47         validateIndex(index);
 48         ensureCapacity();
 49         for(int i=current;i>=index;i--){
 50
 51             data[i+1] = data[i];
 52         }
 53         data[index] = e;
 54         current++;
 55     }
 56     /**
 57      * 判断是否需要扩展数组
 58      * 如果需要将扩展为原来的两倍
 59      */
 60     @SuppressWarnings("unchecked")
 61     private void ensureCapacity(){
 62
 63         if(current == capacity){
 64
 65             capacity = capacity * 2;
 66             E[] newData = (E[])new Object[capacity];
 67             for(int index = 0; index < current; ++index) {
 68                 newData[index] = data[index];
 69             }
 70             data = newData;
 71         }
 72     }
 73
 74     /**
 75      * 删除某个已经存在的对象
 76      * 如果T在数组中,则删除成功返回true,否则无这个元素返回false
 77      */
 78     public boolean remove(E e){
 79
 80         for(int i=0;i<current;i++){
 81
 82             if(data[i].equals(e)){
 83
 84                 remove(i);
 85                 return true;
 86             }
 87         }
 88         return false;
 89     }
 90     /**
 91      * 删除特定下标的数组
 92      * @param index
 93      */
 94     public void remove(int index){
 95
 96         validateIndex(index);
 97         for(int i=index;i<current;i++){
 98
 99             data[i] = data[i+1];
100         }
101         data[current] = null;
102         current--;
103     }
104     /**
105      * 修改下标为index的值*/
106     public void set(int index, E e){
107
108         validateIndex(index);
109         data[index] = e;
110     }
111     /**
112      * 获取下标为index的值
113      */
114     public E get(int index){
115
116         validateIndex(index);
117         return data[index];
118     }
119     /**
120      * 获取数组已使用的个数
121      */
122     public int size(){
123
124         return current;
125     }
126     /**
127      * 销毁数组所有元素
128      */
129     public void clear(){
130
131 //      Arrays.fill(data, null);  可以替代下面的for循环
132         for(int i=0;i<current;i++){
133
134             data[i] = null;
135         }
136         capacity = 0;
137         current = 0;
138     }
139     /**
140      * 判断数组是否为空
141      */
142     public boolean isEmpty(){
143
144         return current==0;
145     }
146     /**
147      * 打印结构
148      */
149     public String toString() {
150
151         String str = "[ ";
152         for (Object o : data) {
153             if (o != null) {
154                 str += o + " ";
155             }
156         }
157         str += "]";
158         return str;
159     }
160     /**    * 判断index 是否越界   */
161     private void validateIndex(int index) {
162
163         if (index < 0 || index >= current) {
164             throw new IndexOutOfBoundsException("无效的下标:" + index);
165         }
166     }
167     
时间: 2024-10-06 17:13:37

Java实现顺序表的相关文章

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

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

java实现顺序表结构

package com.hephec; import java.util.Arrays; public class SequenceList<T>{ //以指定长度的数组来创建顺序线性表 //@param element 指定顺序线性表中的第一个元素 //@param initSize 指定顺序线性表底层数组的长度 private int DEFAULT_SIZE = 16; //保存数组的长度 private int capacity; //定义一个数组用于保存顺序线性表的元素 privat

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

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

数据结构——Java实现顺序表

一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 2.销毁顺序表 3.清空顺序表 4.检测顺序表是否为空 5.返回顺序表的元素个数 6.返回顺序表中指定位置元素的值 7.返回顺序表中第一个与指定值相同的元素的位置 8.返回指定元素的直接前驱 9.返回指定元素的直接后继 10.向指定位置插入元素 11.删除指定位置的元素 12.遍历顺序表 在Java

Java 3:顺序表的操作

顺序表常见操作有插入.删除.查找.修改.一.插入:1.插入有头插.尾插.任意位置插入.在插入时要注意下标的取值在顺序表长度范围内.所以最好在插入之前进行扩容操作.2.在头插时要注意先将原数组的元素从后往前依次向后移动.因为如果从前往后开始移动的话,会造成后一个元素被前一个元素覆盖,而丢失数据且造成重复.arr[i+1]=arr[i],注意此处i的意思是要移动的元素的下标.3.任意位置插入与头插类似,从后往前(要插入的位置元素下标)依次向后移动,再将数据插入二.删除1.删除有头删.尾删.任意位置删

(java实现)顺序表-ArrayList

什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入内存,中间没有一点空隙. 基本操作 每个数据结构都有集合对数据处理的方法,这能让我们更方便的使用保存在数据结构中的数据.顺序表的基本操作有:增(add),删(remove),改(set),查(find),插(insert)等. 在这里我们只详细讲解remove 和 insert 操作,其他实现可看下

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

数据结构顺序表Java实现

Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大小,即数据元素的个数. public int getSize(); //如果线性表为空返回 true,否则返回 false. public boolean isEmpty(); //判断线性表是否包含数据元素 e public boolean contains(Object e); //返回数据元素

数据结构----顺序表与单链表(JAVA)

下面为学习顺序表和单链表的一些基本操作函数: 1 public class SeqList<T> extends Object { 2 protected int n; 3 protected Object[] element; 4 5 public SeqList(int length) { 6 this.element = new Object[length]; 7 this.n = 0; 8 } 9 10 public SeqList() { 11 this(64); 12 } 13 1