話不多說,讓我們先上**
注:構建陣列所儲存的元素可能為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.編寫程式,進行測試,調整直至得到最終的解.尋求數學模型的實質是分析問題,從中提取操作的物件,並找出這些操作物件之間含有的關係,然後用數學的語言加以描述.資料結構...