資料結構(1) 使用物件導向模擬陣列

2022-07-09 12:54:12 字數 2360 閱讀 4656

陣列是一種常用的資料結構,陣列具有不可變性,建立後的陣列的長度固定,通過索引訪問陣列中的元素,訪問速度快,刪除新增效率低。

通過物件導向模擬陣列,模擬的陣列具有以下功能:

新增新元素

展示查詢元素所在位置

根據索引獲取元素

根據索引刪除元素

修改指定位置的元素

同時使用兩個演算法對陣列進行操作:

有序新增元素

二分查詢法

資料如何儲存呢?在類中新增乙個陣列型別的私有屬性用來儲存資料,同時新增乙個變數儲存有效資料的長度(也就是元素的個數)

建立陣列的時候需要指定陣列的長度,所以要新增兩個構造方法:

1.無參構造方法設定陣列預設長度

2.有參構造方法指定陣列長度

public class myarray 

public myarray(int maxsize)

}

elements 屬性的預設值是 0,第一次向物件中新增元素也是新增到索引為0 的元素中,新增後將 elements 的長度加1,就能一直向陣列中新增元素了,新增元素的個數取決於 arr 的長度。

public void insert(long value)
簡單的展示陣列中的元素即可,使用 for 迴圈遍歷

public void display() 

system.out.println("]");

}

思路:使用迴圈遍歷陣列 arr ,將要查詢的資料和 arr 中每個元素進行比較。如果相等,則跳出迴圈。迴圈結束後,如果迴圈次數等於元素個數說明沒有找到資料,返回-1。否則返回迴圈次數(即找到的索引)。

public int search(long value) 

} //遍歷到末尾說明沒有找到

if (i==elements) else

}

思路:這相對比較簡單了,直接給 arr 索引就能獲取到元素。但是要注意傳入的索引必須可用,不能用的索引可以丟擲異常。

public long get(int index) else 

}

思路:和獲取元素時一樣,先檢查索引是否可用。如果可用,就從要刪除元素的位置開始向後遍歷,每次都將下乙個元素的值賦值給當前元素。也就相當於要刪除的元素被下乙個元素覆蓋,下乙個元素被下下乙個元素覆蓋,以此類推。元素移動完成後,將可用元素長度 elements 減1。

public void delete(int index) else else 

}

public class myarray 

public myarray(int maxsize)

/*** 新增資料

* @param value

*/public void insert(long value)

/*** 顯示資料

*/public void display()

system.out.println("]");

} /**

* 查詢資料

*/public int search(long value)

} //遍歷到末尾說明沒有找到

if (i==elements) else

} /**

* 查詢資料,根據索引來查

*/public long get(int index) else

} /**

* 刪除資料

*/public void delete(int index) else else

}}

思路:修改 insert 方法,遍歷 arr 陣列,如果當前元素大於新增的資料,當前的位置就要存入的位置。從最後乙個元素開始,逐個將元素向後位移,空出要存入的位置。存入要新增的元素後,將有效資料長度加1。

public void insert(long value) 

} for (int j = elements; j > i; j--)

arr[i]=value;

elements++;

}

思路:資料必須是有序的,才能使用二分查詢法!可以結合有序新增元素一塊使用,這裡的序列是公升序(從小到大)。二分查詢是每次和一組數中間的數進行比較,如果大於就再和右邊的數最中間的數比較,如果小於就和左邊的數最中間的數比較。直到中間的數和要查詢的數相等,否則就是沒有這個數。

public int binarysearch(long value) else if(low>high) else else 

} }}

LRU management(模擬資料結構)

lru,作業系統中的最近最常使用演算法 include define maxn 1000005 define ll long long using namespace std struct nodecash maxn 1 模擬鍊錶 表示儲存單元 unordered mapft 雜湊表對映 把位址規模...

演算法 模擬資料結構一

普通佇列 int q 10000 h 0,tt 1 新增乙個元素a q tt a 刪除末尾元素tt 刪除隊頭元素h 輸出while tt h 普通棧 int stock 100005 t 1 新增乙個元素a stock t a 刪除t 單鏈表 優點方便,缺點訪問前乙個元素需要重新訪問一遍 這種方法本...

2020 7 4模擬 資料結構 ds

wobmaj 有 n 個資料結構,第 i 個資料結構具有工業指數 a i 和包容指數 b i b i le a i 他會不斷執行下面這個操作,直到無法再執行為止 選擇二元組 i,j 將第 i 個資料結構套進第 j 個資料結構裡,其中 a i。每個資料結構只能巢狀和被巢狀一次。求可能出現的不同局面的數...