資料結構(基於java語言描述) 動態陣列

2021-08-20 15:44:57 字數 3038 閱讀 9227

話不多說,讓我們先上**

注:構建陣列所儲存的元素可能為string、integer等不同的型別,所以我們有必要設定乙個泛型,讓陣列可以容納我們呼叫時所規定的資料型別。

public class array

//無參建構函式,預設陣列容量為

10public

array()

//現在可以忽略,在之後的堆的描述中我會講解

public

array(e arr)

size = arr.length;}

//獲取陣列的容量

public int

getcapacity()

//獲取陣列中元素的個數

public int

getsize()

//返回陣列是否為空

public boolean

isempty()

//在index

索引的位置插入新元素

public void

add(int index,

e e)

//判斷陣列是否需要擴容

if (size == data.length)

//遍歷將[indxe, size-1]

的元素全部向後移動,在

index

位置插入新的元素

for (int i = size - 1

; i >= index; i--)

data[index] = e;

//此時陣列的

size

增加size++;

} //

向所有元素後新增乙個新元素

public void

addlast(e e)

//在所有元素前新增乙個元素

public void

addfirst(e e)

//從陣列中刪除

index

位置的元素

public

e remove(int index)

e ret = data[index];

//遍歷迴圈,將

[index+1, size-1]

範圍的元素向前移動一位

for (int i = index+1

; i < size

; i++)

//陣列元素減少

size--;

//檢查此時陣列是否需要縮容

if (

size

== data

.length

/ 4

&& data

.length

/ 2

!= 0

)

return

ret;

}

//刪除陣列中第乙個元素,並返回該元素

public

e removefirst

()

//刪除陣列中最後乙個元素,並返回該元素

public

e removelast

()

//修改

index

索引位置的元素為

epublic void

set(

int

index

, e

e)

data

[index] = e;}

//獲取

index

索引的位置

public

e get

(int

index)

return

data

[index]

;

}

public

e getfirst()

public

e getlast()

//

查詢陣列中是否有元素

public boolean

contains(

e e) }

return false;

} //

查詢陣列中元素

e所在的索引,如果不存在元素

e,則返回-1;

public int

find(

e e) }

return -1;

} //

從陣列中刪除元素e;

public void

removeelement(

e e) }

//將陣列中的兩個指定元素交換

public void

swap(

int i

, int j)

e ret =

data[i]

;data[i] =

data[j]

;data[j] = ret;}

//將陣列空間容量跟新

private void

resize(

int newcapacity)

data = newdata;}}

動態陣列擴容的問題

上述**中我們我們給出了如下假設:

在給data陣列新增元素前,如果data陣列中的容量和元素個數size相同,擴容為原來的2倍:

再給data陣列刪除元素後,如果data陣列的size是capacity的1/4,並且capacity不能被2整除

如果我們單純的將data陣列中capacity和size相同時擴容(2倍),小於1/2時縮容(1/2),就會出現這樣乙個情況:

當size達到capacity的零界點時,陣列擴容到原來的兩倍,繞後如果下乙個操作是乙個刪除操作,陣列又會瞬間進行縮容,這樣反覆操作會增加增刪操作的時間複雜度,因此我們需要設定乙個範圍,來給其緩衝。

此時我們陣列的複雜度:

add方 : o(n/2)

addlast: o(1)

addfirst: o(n)

remove: (n/2)

removelast: o(1);

removefirst: o(n)

資料結構(java語言描述) 堆

堆是一棵完全二叉樹,堆的每個父節點的值都大於等於子節點的值。或者 我們用陣列來儲存二叉樹。public class maxheap extends comparable public maxheap public maxheap e arr 返回堆中的元素個數 public int size 返回乙...

物件導向語言系列 資料結構(Java描述)

基本資料型別 atomic data type 結構型資料型別 structure data type 抽象資料型別 abstract data type,adt 傳統程式設計的方法 由下而上的設計 由上而下的設計 由下而上 自下而上的設計 先編寫整個程式需求中最容易的部分,再逐步擴大來完成。由上而...

資料結構之Java描述 序

一般來說,用計算機解決乙個具體問題時,大致需要經過下列幾個步驟 1.從具體問題中抽象出乙個適當的數學模型 2.設計乙個解此模型的演算法 3.編寫程式,進行測試,調整直至得到最終的解.尋求數學模型的實質是分析問題,從中提取操作的物件,並找出這些操作物件之間含有的關係,然後用數學的語言加以描述.資料結構...