Java數據結構--順序表

一、簡介

1.1 概念

順序表示是指按順序存儲結構存儲的一種線性表,順序存儲表中的結點在內存中佔用一段連續的存儲單元。即線性表中邏輯相鄰的元素在內存中存儲位置相鄰。

線性結構特點:在數據元素的非空有限集中,存在唯一的一個首數據元素,存在唯一的一個末數據元素,除首數據元素外,每個數據元素均只有一個直接前驅;除末數據元素外,每個數據均只有一個直接後續。

1.2 優點

  • 方法簡單,各種高級語言中都有數組,容易實現;
  • 不用爲表示結點間的邏輯關係而增加額外的存儲開銷,存儲密度大
  • 順序表具有按元素序號隨機訪問的特點,查找速度快,時間複雜度較小

1.3 缺點

  • 在順序表中進行插入、刪除操作時,平均移動大約表中一半的元素,因此n較大的順序表執行效率低
  • 需要預先分配適當的存儲空間,預先分配過大,可能導致順序表的後部大量閒置;預先分配過小,又會造成溢出

1.4 結構圖

在這裏插入圖片描述

二、簡單實現

public class LineList<T> {
	
	int length = 10;//表長度
	public Object[] data = new Object[length];//存放的數據
	int curlen = 0;//實際表長度
	
	/**
	 * 在指定位置插入數據元素
	 * 
	 * 1、從位置i+1到表尾位置的所有數據元素均要向前移動一個存儲位置,則原來第i+1個結點覆蓋第i個結點;
	 * 2、將新結點插入到空餘位置i處;
	 * 3、修改表長度,使之增加1。
	 * 
	 * @param t 要插入的元素
	 * @param i 要插入的位置
	 * 
	 */
	public void insert(T t, int i) {
		// 判斷插入的位置是否正確
		if(i < 0 || i > length || curlen >= length) {
			System.out.println("插入的位置不對或表已經存滿");
			return;
		}
		// 循環個插入位騰出空間
		for (int j = curlen; j > i; j--) {
			data[j] = data[j - 1];
		}
		data[i] = t;
		curlen++;
	}
	
	/**
	 * 刪除指定位置的數據
	 * 
	 * 從位置i+1到表尾位置的所有數據元素均要向前移動一個存儲位置,則原來第i+1個結點覆蓋第i個結點,
	 * 以此內推,直到表的尾則可實現第i個結點的刪除;
	 * 修改表的長度,使之減1。
	 *	
	 * @param i 要刪除元素的位置
	 * @return
	 */
	public Object delete(int i) {
		if(i < 0 || i > curlen) {
			System.out.println("刪除位置不正確");
			return null;
		}

		// 保存刪除前第i個數據元素
		Object o = data[i];

		// 從i開始循環覆蓋元素
		for (int j = i; j < curlen; j++) {
			data[j] = data[j+1];
		}
		data[curlen] = null;
		curlen--;
		return o;
	}

}

三、使用

public static void main(String[] args) {
	// 插入元素
	LineList<String> lineList = new LineList<>();
	lineList.insert("a", 0);
	lineList.insert("b", 1);
	lineList.insert("c", 2);

	// 打印所有元素
	Object[] obs = lineList.data;
	for(Object o : obs) {
		System.out.print(o + "; ");
	}


	System.out.println("");

	// 刪除元素
	Object object = lineList.delete(0);
	System.out.println("當前刪除的元素:" + object);

	// 打印剩餘元素
	Object[] objects = lineList.data;
	for(Object o : objects) {
		System.out.print(o + "; ");
	}
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章