博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现顺序表
阅读量:6969 次
发布时间:2019-06-27

本文共 3879 字,大约阅读时间需要 12 分钟。

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

1 package arrayList;  2   3 import java.util.Arrays;  4 import java.util.Date;  5   6 /**  7  * 顺序表ArrayList,用数组表示。一组连续的地址空间  8  * @author LH-PC  9  * @param 
10 */ 11 public class ArrayList
{ 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; //将表最大容量*2101 data = Arrays.copyOf(data, length); //将原数组进行拷贝102 }103 104 }105 106 107 /**108 * 返回顺序表实际表长109 * @return110 */111 public int size(){112 return this.current;113 }114 115 /**116 * 返回表容量117 * @return118 */119 public int length(){120 return this.length;121 }122 123 /**124 * 125 * 判断表是否为空126 * @param args127 */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
list = new ArrayList
(); //创建arrayList136 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 }

 

转载于:https://www.cnblogs.com/liaohai/p/6432638.html

你可能感兴趣的文章
WPS或xls 数据分列 清洗
查看>>
HTML Entity 字符实体(字符转义)
查看>>
Linux实时流量监控工具 - iftop
查看>>
基于 HTML5 WebGL 的 3D 场景中的灯光效果
查看>>
怎么样才能让工作经验值钱
查看>>
TP框架如何开启log日志
查看>>
hackathon活动复盘
查看>>
matplotlib 学习总结
查看>>
使用xUnit为.net core程序进行单元测试(2)
查看>>
BI并不是万能,中层业务管理报表要另辟蹊径
查看>>
Python CGI编程
查看>>
XShell命令行使用
查看>>
EularProject 41:最长的n位Pandigital素数问题
查看>>
《iOS Human Interface Guidelines》——Container View Controller
查看>>
深入理解net core中的依赖注入、Singleton、Scoped、Transient(四)
查看>>
通俗版《区块链白皮书》:你要掌握的区块链基本知识
查看>>
2-SAT速成
查看>>
Perl的新特性开启
查看>>
IoT固/软件更新及开源选项
查看>>
集群扩容的常规解决:一致性hash算法
查看>>