JAVA数据结构---顺序表
2016-03-12 21:31
495 查看
定义接口
定义线性表
测试主类:
运行结果:
开始=========================
构造=========================
表长:0
插入5个元素===================
插入元素:
12
插入元素:
32
插入元素:
543
插入元素:
564
插入元素:
65
表长:5
线性表中的元素是:
12 32 543 564 65
增加=========================
增加元素:
元素:
32
位置:
3
表长:6
线性表中的元素是:
12 32 32 564 564 65
查找=========================
查找元素:
32
元素32位于第2位
位置:
3
元素32位于第3位
位置删除=========================
删除元素
位置:
3
删除的元素是:32
表长:5
线性表中的元素是:
12 32 564 564 65
元素删除=========================
元素:
564
删除的元素是:564
表长:4
线性表中的元素是:
12 32 564 65
结束=========================
package LinerTable; public interface ListIntf { public abstract int size(); public abstract void clear(); public abstract boolean isEmpty(); public abstract Object get(int i); public abstract int indexOf(Object obj); public abstract Object getPre(Object obj); public abstract Object getNext(Object obj); public abstract void insertElementAt(Object obj, int i); public abstract Object remove(int i); public abstract Object remove(Object obj); }
定义线性表
package LinerTable; public class Sqlist implements ListIntf { // 线性表的长度 public static final int MAXSIZE = 100; // 定义数组 Object[] elem = new Object[MAXSIZE]; private int len = 0; public int getMAXSIZE() { return MAXSIZE; } /** * 接口的实现 */ // 线性表的大小 public int size() { return len; } // 清空线性表 public void clear() { len = 0; } // 判断线性表是否为空 public boolean isEmpty() { if (len == 0) return true; return false; } // 得到线性表的元素 public Object get(int i) { if (len == 0) return null; if (i < 1 || i > len) return null; return elem[i - 1];// 查找不用循环,相当于数组引用 } // 根据数据返回线性表中的下标 public int indexOf(Object obj) { for (int i = 0; i < len; i++) { if (elem[i].equals(obj)) return i c981 + 1; } return -1; } // 根据内容查找前驱元素 public Object getPre(Object obj) { int i = indexOf(obj); if (i == -1) return null; else if (i == 1) return null; return elem[i - 2]; } // 如果obj是线性表中的元素,则返回下一个元素 public Object getNext(Object obj) { int i = indexOf(obj); if (i == -1) return null; else if (i == len) return null; return elem[i]; } // 在指定的位置插入元素 public void insertElementAt(Object obj, int i) { if (len == MAXSIZE) { System.out.println("线性表已经满了,溢出."); return; } else if (i < 1 || i > len + 1) { System.out.println("插入位置非法."); return; } for (int j = len - 1; j > i - 1; j--) elem[j + 1] = elem[j]; elem[i - 1] = obj; len++; return; } // 删除元素,并且返回删除的值 public Object remove(int i) { Object obj; if (i < 1 || i > len) { System.out.println("删除位置非法."); return null; } obj = elem[i - 1]; for (int j = i - 1; j < len - 1; j++) { elem[j] = elem[j + 1]; } len--; return obj; } // 根据内容删除元素,返回其值,长度减1 public Object remove(Object obj) { int i = indexOf(obj); if (i == -1) { System.out.println("要删除的元素不存在."); return null; } return remove(i); } /** * 新增的方法 */ public void printList() { if (len == 0) { System.out.println("线性表为空."); return; } System.out.println("线性表中的元素是:"); for (int i = 0; i < len; i++) System.out.print(elem[i].toString() + " "); System.out.println(); } }
测试主类:
package LinerTable; import java.util.Scanner; public class MainTest { public static void main(String[] args) { System.out.println("开始========================="); System.out.println("构造========================="); Object obj; int n; Scanner input = new Scanner(System.in); Sqlist sl = new Sqlist(); System.out.println("表长:" + sl.size()); // 构造5个元素的线性表 System.out.println("插入5个元素==================="); for (int i = 0; i < 5; i++) { System.out.println("插入元素:"); obj = input.next(); sl.insertElementAt(obj, sl.size() + 1); } System.out.println("表长:" + sl.size()); sl.printList(); // 增加元素 System.out.println("增加========================="); System.out.println("增加元素:"); System.out.println("元素:"); obj = input.next(); System.err.println("位置:"); n = Integer.parseInt(input.next()); sl.insertElementAt(obj, n); System.out.println("表长:" + sl.size()); sl.printList(); // 查找元素 System.out.println("查找========================="); System.out.println("元素查找:"); obj = input.next(); n = sl.indexOf(obj); if (n != -1) System.out.println("元素" + obj + "位于第" + n + "位"); System.out.println("位置:"); n = Integer.parseInt(input.next()); obj = sl.get(n); if (obj != null) System.out.println("元素" + obj + "位于第" + n + "位"); // 删除元素 System.out.println("位置删除========================="); System.out.println("删除元素"); System.out.println("位置:"); n = Integer.parseInt(input.next()); obj = sl.remove(n); if (obj != null) System.out.println("删除的元素是:" + obj); System.out.println("表长:" + sl.size()); sl.printList(); System.out.println("元素删除========================="); System.out.println("元素:"); obj = input.next(); Object obj1 = sl.remove(obj); if (obj != null) System.out.println("删除的元素是:" + obj1); System.out.println("表长:" + sl.size()); sl.printList(); input.close(); System.out.println("结束========================="); } }
运行结果:
开始=========================
构造=========================
表长:0
插入5个元素===================
插入元素:
12
插入元素:
32
插入元素:
543
插入元素:
564
插入元素:
65
表长:5
线性表中的元素是:
12 32 543 564 65
增加=========================
增加元素:
元素:
32
位置:
3
表长:6
线性表中的元素是:
12 32 32 564 564 65
查找=========================
查找元素:
32
元素32位于第2位
位置:
3
元素32位于第3位
位置删除=========================
删除元素
位置:
3
删除的元素是:32
表长:5
线性表中的元素是:
12 32 564 564 65
元素删除=========================
元素:
564
删除的元素是:564
表长:4
线性表中的元素是:
12 32 564 65
结束=========================
相关文章推荐
- JAVA数据结构---顺序表
- JAVA数据结构---顺序表
- JAVA数据结构---顺序表
- JAVA数据结构---顺序表
- JAVA数据结构---顺序表
- JAVA数据结构---顺序表
- Scalaz(31)- Free :自由数据结构-算式和算法的关注分离
- Scalaz(31)- Free :自由数据结构-算式和算法的关注分离
- 数据结构-图-经典算法(三)
- 数据结构与算法一:算法复杂度分析
- 数据结构-图-经典算法(二)
- nginx 学习八 高级数据结构之基数树ngx_radix_tree_t
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing