zoukankan      html  css  js  c++  java
  • java实现顺序表

    现在常用的数据结构分为线性结构和非线性结构,而线性结构包括表,栈,队列,非线性包括树,图等等。按照数据存储方式有可以将表分为顺序表和链表,栈分为顺序栈,链栈,队列也可以有链是队列。在高级语言中通常用数组来表示顺序存储结构,所以表,栈,队列都可以用数组来做。

      1 package arrayList;
      2 
      3 import java.util.Arrays;
      4 import java.util.Date;
      5 
      6 /**
      7  * 顺序表ArrayList,用数组表示。一组连续的地址空间
      8  * @author LH-PC
      9  * @param <E>
     10  */
     11 public class ArrayList<E> {
     12     private Object[] data = null; //data 用来保存此线性表的数据域
     13     private int length; //线性表的容量
     14     private int current; //实际表长
     15     
     16     /**
     17      * 默认将大小设置为10
     18      */
     19     public ArrayList(){
     20         this(10);
     21     }
     22     
     23     
     24     /**
     25      * 初始化线性表,声明数组大小
     26      * @param initialSize 数组大小
     27      */
     28     public ArrayList(int initialSize){
     29         if(initialSize >= 0){
     30             this.length = initialSize; //设置线性表容量
     31             this.data = new Object[initialSize]; //初始化数组
     32             this.current = 0; //下标设置为0
     33         }else {
     34             throw new RuntimeException("初始化大小不能小于0:" + initialSize); //异常提示
     35         }
     36         
     37     }
     38     
     39     
     40     /**
     41      * 在线性表末尾添加元素,添加之前判断线性表是否已经满了
     42      * @param e 添加的元素
     43      * @return 成功返回真
     44      */
     45     public boolean add(E e){
     46         //判断是否已满
     47         ensureCapacity();
     48         //将元素添加到数组末尾
     49         this.data[current++] = e;  
     50 //        ++current; //下标++
     51         return true;
     52     }
     53     
     54     /**
     55      * 删除指定位置的元素
     56      * @param index
     57      * @return
     58      */
     59     public boolean removeToIndex(int index){
     60         //删除数组的元素:使用改变数组下标的方式达到删除的效果。
     61         //遍历数组匹配指定下标,让指定下标右边的元素往左移动改变下标。最后再将最右边的下标删除
     62         //a b c 
     63         //0 1 2
     64         //data[index] = data[index + 1];  //改变右边下标
     65         //data                             //删除最右边的下标
     66         //从待删除下标处开始遍历,将右边的元素往左移
     67         if(index >= current){  //如果index大于最大长度,返回假
     68             System.err.print(new Date() + ": 下标超出表长");
     69             return false;
     70         }
     71         for (int i = index; i < current - 1; i++) {
     72             data[i] = data[i+1]; //该表元素下标
     73         }
     74         data[current-1] = null;  //将原来下标最右边的一位元素变成null
     75         --current;  //实际表长-1
     76         return true;
     77     }
     78     
     79     
     80     /**
     81      * 根据下标返回元素值
     82      * @param index
     83      * @return
     84      */
     85     public E get(int index){
     86         if(index >= 0){
     87             return (E) data[index];
     88         }else {
     89             throw new RuntimeException("下标不能小于0:" + index);
     90         }    
     91     }
     92     
     93     /**
     94      * 判断表容量是否超出预定大小,如果超出将自动扩充容量
     95      * 
     96      */
     97     public void ensureCapacity(){
     98         //判断表实际长度是否超出表最大容量
     99         if(current >= length){
    100             length *= 2; //将表最大容量*2
    101             data = Arrays.copyOf(data, length);  //将原数组进行拷贝
    102         }
    103         
    104     }
    105     
    106 
    107     /**
    108      * 返回顺序表实际表长
    109      * @return
    110      */
    111     public int size(){
    112         return this.current;
    113     }
    114     
    115     /**
    116      * 返回表容量
    117      * @return
    118      */
    119     public int length(){
    120         return this.length;
    121     }
    122     
    123     /**
    124      * 
    125      * 判断表是否为空
    126      * @param args
    127      */
    128     public boolean isEmpty(){
    129         //return (current == 0) ? true : false;
    130         return current == 0; //如果current == 0,说明为空返回真,否则返回假
    131     }
    132     
    133     //主方法测试
    134     public static void main(String[] args) {
    135         ArrayList<Integer> list = new ArrayList<Integer>(); //创建arrayList
    136         for (int i = 1; i <= 22; i++) {
    137             list.add(i);
    138         }
    139         list.removeToIndex(0);
    140 //        list.removeToIndex(list.size());
    141         //遍历list数组
    142         for (int i = 0; i < list.size(); i++) {
    143             System.out.println(list.get(i));
    144         }
    145         
    146     }
    147 
    148 }
  • 相关阅读:
    NFS-网络文件共享服务
    CentOS7.5基础优化与常用配置
    29张截图-全新安装CentOS7.5-超详细!
    VMware跨电脑移动Linux虚拟机
    搭建markdown图床-腾讯云COS
    tcpdump-抓包工具-Linux
    vmware克隆虚拟机
    CentOS6.9安装httpd并正确配置静态IP地址
    区块链核心技术与应用
    docker安装jenkins自动化部署
  • 原文地址:https://www.cnblogs.com/liaohai/p/6432638.html
Copyright © 2011-2022 走看看