数据结构之线性表:顺序线性表 Java 实现(底层基于数组)
生活随笔
收集整理的這篇文章主要介紹了
数据结构之线性表:顺序线性表 Java 实现(底层基于数组)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼實現
package top.gldwolf.java.datastructure.lineartable;/*** 順序線性表* @param <T> 存儲的元素類型*/ public class LinearTable<T> {private static final int INITIAL_SIZE = 20; // 線性表的初始容量private Object[] data = null; // 真正存儲數據的數組private int length; // 線性表的長度private int cursor = 0; // 指向當前存在數據的索引的下一個,用于 append 數據/*** 創建一個默認容量大小(20)的順序線性表*/public LinearTable() {data = new Object[INITIAL_SIZE];this.length = INITIAL_SIZE;}/*** 創建線性表** @param size 線性表長度*/public LinearTable(int size) {data = new Object[size];this.length = size;}/*** 獲取線性表的長度** @return 表長度*/public int length() {return this.length;}/*** 獲取指定索引的數據** @param index 索引,從 1 開始* @return 該索引對應位置的數據* @throws Exception 如果下標位置不對,則拋出該異常*/public T get(int index) throws Exception {if (index <= 0 || index > data.length) {throw new Exception("下標越界");}return (T) data[index - 1];}/*** 在表尾部追加數據** @param data 要添加的數據* @return 如果數據添加數據成,則返回 true,如果失敗,則返回 false*/public boolean append(T data) {try {this.data[cursor] = data;cursor++;return true;} catch (Exception e) {return false;}}/*** 在指定位置插入數據* @param index 插入的索引位置* @param data 要插入的數據* @return 是否插入成功* @throws Exception 當索引越界或表已滿時*/public boolean insert(int index, T data) throws Exception {if (index <= 0 || index > length || cursor > length - 1 || this.data[index - 1] != null) { // 下標越界或表已滿throw new Exception("下標越界或線性表已滿!");} else if (index == length) { // 當插入的位置為最后一個元素時this.data[index - 1] = data;cursor ++;return true;} else { // 當下標不越界,并且數組未滿時for (int i = cursor; i >= index - 1; i--) {this.data[i + 1] = this.data[i];}this.data[index - 1] = data;this.cursor++;return true;}}/*** 刪除指定索引的數據* @param index 索引位置* @return 刪除是否成功* @throws Exception 索引越界時*/public boolean delete(int index) throws Exception {if (index <= 0 || index > length) { // 當索引越界時throw new Exception("下標越界!");} else if (index == length) { // 當要刪除的為最后一個元素時data[index - 1] = null;return true;} else { // 當刪除的不是最后一個時for (int i = index - 1; i < length - 1; i++) {data[i] = data[i + 1];}data[length - 1] = null;return true;}}@Overridepublic String toString() {StringBuffer res = new StringBuffer();for (Object t : data) {res.append(t + ", ");}return res.toString();} }測試類
package top.gldwolf.java.datastructure.lineartable;/*** @author: Gldwolf* @email: ZengqiangZhao@sina.com* @date: 2020/4/14 19:11*/public class LinearTableDriver {public static void main(String[] args) throws Exception {LinearTable<String> table = new LinearTable<>(5);table.append("hello");table.append("world");table.append("you");System.out.println(table.toString());table.insert(2, "good");System.out.println("------------");System.out.println(table.toString());System.out.println("------------");table.insert(5, "last");System.out.println(table.toString());table.delete(5);System.out.println(table.toString());table.delete(2);System.out.println(table.toString());} }總結
以上是生活随笔為你收集整理的数据结构之线性表:顺序线性表 Java 实现(底层基于数组)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: send()/recv()和write(
- 下一篇: socket编程实现回声客户端