Array
Array (Massiv) eyni tipli məlumatları bir ad altında saxlamağa imkan verən ən əsas məlumat strukturlarından biridir. Massivin bütün elementləri yaddaşda ardıcıl (contiguous) yerləşir və hər bir elementə indeks vasitəsilə birbaşa müraciət etmək mümkündür
Array nədir?
Array (Massiv) eyni tipli məlumatları bir ad altında saxlamağa imkan verən ən əsas məlumat strukturlarından biridir. Massivin bütün elementləri yaddaşda ardıcıl (contiguous) yerləşir və hər bir elementə indeks vasitəsilə birbaşa müraciət etmək mümkündür.
Məsələn, 5 tələbənin ballarını ayrı-ayrı dəyişənlərdə saxlamaq əvəzinə:
int bal1 = 85;
int bal2 = 92;
int bal3 = 78;
int bal4 = 100;
int bal5 = 67;bir massiv yaratmaq kifayətdir:
int bal[5] = {85, 92, 78, 100, 67};Beləliklə, bütün məlumatlar bir dəyişəndə toplanır və onlarla işləmək çox asanlaşır.
Nə üçün Array istifadə olunur?
Təsəvvür edin ki, 100.000 ədəd oxumalısınız.
Massiv olmasa belə yazmalı olardınız:
int a1, a2, a3, ..., a100000;Bu həm mümkün deyil, həm də idarə etmək çox çətindir.
Array istifadə etdikdə isə sadəcə
int a[100000];yazmaq kifayətdir.
Artıq bütün elementlərə dövr (loop) vasitəsilə rahat şəkildə müraciət etmək mümkündür.
Array necə işləyir?
Massivdə bütün elementlər yaddaşda ardıcıl yerləşir.
Məsələn:
İndeks | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
Dəyər | 12 | 7 | 25 | 31 | 18 |
Burada
a[0] = 12
a[1] = 7
a[2] = 25
a[3] = 31
a[4] = 18Massivdə birinci elementin indeksi həmişə 0 olur.
Sonuncu element isə
a[n-1]şəklində yazılır.
Əgər massivin ölçüsü 5-dirsə
a[4]sonuncu elementdir.
Array yaratmaq
Ən sadə yaradılma üsulu
int a[5];Bu kod 5 tam ədəd saxlaya bilən massiv yaradır.
İlkin qiymət vermək
int a[5] = {3, 8, 2, 7, 10};və ya
int a[] = {3, 8, 2, 7, 10};İkinci halda kompilyator ölçünü özü hesablayır.
Elementə müraciət
Massivin istənilən elementini indeks vasitəsilə oxumaq mümkündür.
cout << a[2];Çıxış
2Çünki indekslər 0-dan başlayır.
Elementi dəyişmək
a[1] = 100;Əvvəl
3 8 2 7 10Sonra
3 100 2 7 10Array-i daxil etmək
Ən çox istifadə olunan üsul
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++)
cin >> a[i];Burada
a[i]massivin i-ci elementidir.
Array-i çap etmək
for (int i = 0; i < n; i++)
cout << a[i] << " ";Dövr ilə işləmək
Array-in ən böyük üstünlüyü odur ki, bütün elementlər üzərində dövr qurmaq mümkündür.
for (int i = 0; i < n; i++)
{
// a[i] ilə işləyirik
}Demək olar ki, yarış proqramlaşdırmasının 70%-də bu dövr istifadə olunur.
Ən çox istifadə olunan əməliyyatlar
1. Elementlərin cəmi
int sum = 0;
for (int i = 0; i < n; i++)
sum += a[i];2. Maksimum elementi tapmaq
int mx = a[0];
for (int i = 1; i < n; i++)
if (a[i] > mx)
mx = a[i];3. Minimum elementi tapmaq
int mn = a[0];
for (int i = 1; i < n; i++)
if (a[i] < mn)
mn = a[i];4. Neçə dəfə təkrarlandığını tapmaq
Məsələn, 5 ədədinin neçə dəfə olduğunu hesablayaq.
int cnt = 0;
for (int i = 0; i < n; i++)
{
if (a[i] == 5)
cnt++;
}5. Tək elementləri saymaq
int cnt = 0;
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 1)
cnt++;
}6. Cüt elementləri saymaq
int cnt = 0;
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
cnt++;
}7. Ən böyük elementi və indeksini tapmaq
int mx = a[0];
int pos = 0;
for (int i = 1; i < n; i++)
{
if (a[i] > mx)
{
mx = a[i];
pos = i;
}
}8. Massivi tərsinə çap etmək
for (int i = n - 1; i >= 0; i--)
cout << a[i] << " ";9. Massivdə element axtarmaq (Linear Search)
int x;
cin >> x;
bool found = false;
for (int i = 0; i < n; i++)
{
if (a[i] == x)
{
found = true;
break;
}
}Vaxt mürəkkəbliyi
Əməliyyat | Mürəkkəblik |
|---|---|
İndeks ilə elementə müraciət | O(1) |
Elementi dəyişmək | O(1) |
Element əlavə etmək (sonuna, sabit ölçülü massivdə mümkün deyil) | — |
Bütün elementləri oxumaq | O(N) |
Cəmi hesablamaq | O(N) |
Maksimum tapmaq | O(N) |
Minimum tapmaq | O(N) |
Linear Search | O(N) |
Ən çox buraxılan səhvlər
1. İndeksi 1-dən başlamaq
Səhv
for (int i = 1; i <= n; i++)
cin >> a[i];Düzgün
for (int i = 0; i < n; i++)
cin >> a[i];2. Son elementi a[n] hesab etmək
Səhv
cout << a[n];Düzgün
cout << a[n - 1];3. Dövrün sərhədini səhv yazmaq
Səhv
for (int i = 0; i <= n; i++)Bu halda a[n] oxunmağa çalışılır və proqram Out of Bounds xətası ilə qarşılaşa bilər.
Düzgün
for (int i = 0; i < n; i++)4. Massivin ölçüsündən kənara çıxmaq
Əgər
int a[5];yaradılıbsa, yalnız aşağıdakı indekslər mövcuddur:
0
1
2
3
4a[5], a[6] və s. istifadə etmək Undefined Behavior yaradır.
Nəticə
Array proqramlaşdırmada və alqoritmlərdə ən fundamental məlumat strukturlarından biridir. Yarış proqramlaşdırmasında rast gəlinən məsələlərin böyük hissəsi massivlər üzərində qurulur. Massivlə işləməyi mükəmməl səviyyədə mənimsəmək dövrlər (loops), şərtlər (conditions), axtarış (searching), çeşidləmə (sorting) və daha mürəkkəb alqoritmləri öyrənmək üçün möhkəm təməl yaradır. Buna görə array mövzusu proqramlaşdırmaya başlayan hər bir inkişaf etdiricinin ilk və ən vacib öyrənməli olduğu mövzulardan biridir.
Öyrəndiyini yoxla
Mövzuya aid məsələləri DevCode-da həll et.
Digər məqalələr
IDS və IPS Nədir, Aralarındakı Fərqlər Hansılardır?
IDS və IPS
Quick Sort (Sürətli Sıralama)
Bu dərsdə Quick Sort alqoritminin "böl və idarə et" məntiqi ilə işləmə prinsipini və C++ dilində tətbiqini öyrənəcəksiniz. Pivot elementinin seçim strategiyalarını və bu seçimin alqoritmin sürətinə necə təsir etdiyini detallı şəkildə təhlil edəcəyik. Həmçinin, alqoritmin zaman və məkan mürəkkəbliyini, üstünlüklərini və digər sıralama üsullarından fərqini mənimsəyəcəksiniz.