博主也是第一次當博主,想要做一名名副其實的程式設計師,當然本質可能還是個商科生,看到部落格的朋友可以一起交流經驗,wechat:lyi_1998
陣列(array):是一種線性表結構。它用一組連續的記憶體空間來儲存一組具有相同型別的資料,同時它也是最基礎的資料結構。!此處應有線性表概念:資料排成一條線,每個線性表上的資料最多只有前後兩個方向。常見的線性表資料結構有:陣列、鍊錶、佇列和棧等。
!此處應有有疑問,什麼是非線性表?其中就有樹、堆、圖等資料結構。它們的資料之間並不是簡單的前後關係,所以是非線性的。
下面正式介紹陣列的使用!
一般我們都是利用陣列進行增刪查資料,眾所周知,陣列查詢速度較快,插入刪除資料較慢,這個是為何?看下面!
根據我學習的專欄《資料結構與演算法之美》知識得知,對於下述**,
int
arr =
newint[10
];
一維陣列:a[i]_address = base_address + i *
data_type_size
m*n陣列:a[ i ][ j ](i < m, j < n)的定址公式為:
a[ i ][ j ]_address = base_address + (i * n + j) * data_type_size
說明:data_type_size表示陣列中每個元素的大小,即幾個位元組由此得出下圖,計算出該元素的記憶體位址,由下標隨機訪問陣列中的某個元素的時間複雜度為o(1)
若從第k位插入,則後續所有資料往後移,此舉是為了保證記憶體的連續性。
只記得平均時間複雜度:o(n)
特殊情況提高效率:如果不是有序陣列,那麼可以直接把第k個位置上的資料移動到最後,然後將要插入的資料放在k位置上,這樣時間複雜度就為:o(1)
陣列容器
儲存基本資料型別以及引用資料型別
儲存引用資料型別
長度固定
長度可變
儲存元素必須為統一資料型別
儲存可不唯一資料型別
ps:arraylist(底層用陣列實現)
package data_structure;
public
class
myarray
// 插入操作,按順序
public
void
insert
(int value)
}// 將插入位置及之後的元素後移一位,最後一位先開始移動
for(
int j = size; j > i; j--
)// 將新增元素放置在i處
array[i]
= value;
size++;}
// 刪除操作
public
void
delete
(int index)
else
size--;}
}// 修改操作
public
void
modify
(int index,
int value)
// 查詢操作:根據值二分查詢
public
intbinarysearch
(int value)
else
if(array[mid]
else
if(array[mid]
> value)}}
// 查詢操作:下標查詢
public
intsearch
(int index)
// 顯示陣列
public
void
display()
system.out.
print
("]");
}public
static
void
main
(string[
] args)
}}
方法一:自定義自動擴容
參考陣列
public
class
dynamicarray
public
static
int[
]insert
(int index,
int num)
// 先判斷陣列是否已經存滿
int[
] brr = null;
if(arr.length == size)
brr[index]
= num;
// 插入陣列
arr = brr;
// 將變數arr指向擴容後的陣列brr
}else
arr[index]
= num;}
size ++
;return arr;
}// 擴容
public
static
int[
]expandarray
(int
arr)
}
方法二:jdk自帶擴容演算法:array.copyof(array,newlength);public
class
dynamicarray1
public
static
int[
]insert
(int index,
int num)
// 先判斷陣列是否已經存滿
int[
] brr = null;
if(arr.length == size)
brr[index]
= num;
// 插入陣列
arr = brr;
// 將變數arr指向擴容後的陣列brr
}else
arr[index]
= num;}
size ++
;return arr;
}public
static
int[
]expandarray
(int
arr)
}
參考:
1.極客時間的《資料結構與演算法之美》專欄
2.資料結構與演算法——陣列
資料結構與演算法 陣列
陣列是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。其中有幾個重要的概念 非線性表 連續的記憶體空間 儲存相同型別的資料 如圖所示,這是乙個長度為5的int陣列arr,我們假設起始的記憶體位址為1000,那麼第乙個元素的記憶體位址範圍就是 1000 1003,這是因為乙...
資料結構與演算法 陣列
題型1 如何用遞迴實現陣列求和 方法1 題型2 如何用乙個for迴圈列印乙個二維陣列 方法1 array在二維陣列中的行號和列號分別為 i maxy i maxy 題型3 用遞迴和非遞迴的方法實現二分查詢 題型4 如何在排序陣列中,找出給定數字出現的次數 方法1 二分查詢,分別找出左邊界和右邊界,左...
資料結構與演算法 陣列
陣列是由相同型別的元素 element 的集合所組成的資料結構,分配一塊連續的記憶體來儲存。利用元素的索引 index 可以計算出該元素對應的儲存位址。維基百科 陣列是線性表資料結構,定義陣列時,系統會分配乙份連續的記憶體空間來儲存一組相同的型別的資料,如int num n 陣列定義為一維陣列 二維...