数据结构-线性表之顺序储存(Java实现)
2016-07-02 10:39
701 查看
理解
顺序储存结构是用数组来保存数据的。用图来表示如下:点击这里查看大图
说明:线性表也就是数组的一种特殊储存方式:从头到尾依次储存数据。
下面这种情况就不是线性表:
点击这里查看大图
插入数据
1. 线性表为空的情况
点击这里查看大图很简单,当线性表为空时,将数据放到0的位置上就可以了
2. 插入到末尾
点击这里查看大图说明:1和2是一种情况,都是将数据直接添加到线性表的末尾。
3. 一般情况
点击这里查看大图说明:简单来理解,就是腾出地方,然后插入。
移除数据
1. 末尾的数据移除
点击这里查看大图说明:很简单,直接置空就可以了。
2.一般情况
点击这里查看大图说明:跟插入的一般操作相反,先移除,再把坑填上。
Java代码实现及演示
实现代码
以下代码是一个简单的实现//顺序存储结构 public class MyArray { //用来保存数据的数组 private String[] arrs; //数组的默认大小 private static final int DEFAULT_SIZE = 10; //数组的大小 private int maxSize; //线性表的大小 private int size; public MyArray() { this(DEFAULT_SIZE); } public MyArray(int size) { maxSize = size; arrs = new String[maxSize]; } //往线性表中指定位置插入数据 public void insert(int i, String str) { //1.参数校验 if (i < 0) { throw new IllegalArgumentException("i不能小于0"); } if (i > size) { throw new IllegalArgumentException("当前线性表的大小为" + size + ",i的最大值不能超过" + size + ",i目前是" + i); } //2.根据情况改变数组长度 String[] newArrs; String[] oldArrs; if (size == maxSize) { //数组已经满了,需要改变长度 oldArrs = arrs; newArrs = new String[(int) (maxSize * 1.5)]; for (int j = 0; j < size; j++) { newArrs[j] = oldArrs[j]; } maxSize = (int) (maxSize * 1.5); arrs = newArrs; } //3.插入到末尾的处理 if (i == size) { arrs[i] = str; size++; look(); return; } //3.移动位置 for (int j = size; j > i; j--) { arrs[j] = arrs[j - 1]; } //4.插入数据 arrs[i] = str; size++; look(); } //移除线性表指定位置上的数据 public void remove(int i) { //1.参数校验 if (i < 0) { throw new IllegalArgumentException("i不能小于0"); } if (i >= size) { throw new IllegalArgumentException("当前线性表的大小为" + size + ",i的最大值不能大于等于" + size + ",i目前是" + i); } //2.移除 arrs[i] = null; //3.末尾的处理 if (i == size - 1) { size--; look(); return; } //3.一般情况的处理 for (int j = i; j < size - 1; j++) { arrs[j] = arrs[j + 1]; } //4.最后一位置空 arrs[size - 1] = null; size--; look(); } //情况数据 public void clear() { if (arrs != null) { for (int i = 0; i < size; i++) { arrs[i] = null; } } size = 0; look(); } //查看数据 private void look() { if (arrs != null) { System.out.println(""); for (int i = 0; i < arrs.length; i++) { System.out.print(" " + arrs[i]); } } } }
插入操作演示
public class Main { public static void main(String[] args) { MyArray array = new MyArray(4); array.insert(0,"1"); array.insert(1,"2"); array.insert(0,"3"); array.insert(0,"4"); array.insert(0,"5"); array.insert(3,"6"); array.insert(5,"7"); array.insert(6,"8"); array.insert(7,"9"); } }
结果:
1 null null null 1 2 null null 3 1 2 null 4 3 1 2 5 4 3 1 2 null 5 4 3 6 1 2 5 4 3 6 1 7 2 null null 5 4 3 6 1 7 8 2 null 5 4 3 6 1 7 8 9 2
移除及清空代码演示
public class Main { public static void main(String[] args) { MyArray array = new MyArray(4); array.insert(0,"1"); array.insert(1,"2"); array.insert(2,"3"); array.insert(3,"4"); array.insert(4,"5"); array.insert(5,"6"); array.remove(5); array.remove(0); array.remove(1); array.clear(); } }
结果:
1 null null null 1 2 null null 1 2 3 null 1 2 3 4 1 2 3 4 5 null 1 2 3 4 5 6 1 2 3 4 5 null 2 3 4 5 null null 2 4 5 null null null null null null null null null
结语
Java中,ArrayList已经进行了封装,我们直接使用就可以了。点击这里查看ArrayList源码的相关理解
转载请标明出处:http://blog.csdn.net/qq_26411333/article/details/51809550
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树