Veri Yapıları ve Algoritmalar - Diziler
Dizi, sabit sayıda öğeyi tutabilen bir kaptır ve bu öğeler aynı türde olmalıdır. Veri yapılarının çoğu, algoritmalarını uygulamak için dizilerden yararlanır. Array kavramını anlamak için önemli terimler aşağıdadır.
Element - Bir dizide depolanan her öğeye öğe denir.
Index - Bir dizideki bir öğenin her konumunun, öğeyi tanımlamak için kullanılan bir sayısal indeksi vardır.
Dizi Gösterimi
Diziler, farklı dillerde çeşitli şekillerde tanımlanabilir. Örnek olarak C dizi bildirimini ele alalım.
Diziler, farklı dillerde çeşitli şekillerde tanımlanabilir. Örnek olarak C dizi bildirimini ele alalım.
Yukarıdaki şekle göre, dikkate alınması gereken önemli noktalar aşağıdadır.
Dizin 0 ile başlar.
Dizi uzunluğu 10'dur, yani 10 öğe depolayabilir.
Her elemana kendi dizini üzerinden erişilebilir. Örneğin, indeks 6'daki bir elemanı 9 olarak getirebiliriz.
Temel işlemler
Bir dizi tarafından desteklenen temel işlemler aşağıdadır.
Traverse - tüm dizi elemanlarını tek tek yazdırın.
Insertion - Verilen dizine bir öğe ekler.
Deletion - Verilen dizindeki bir öğeyi siler.
Search - Verilen dizini veya değere göre bir öğeyi arar.
Update - Verilen dizindeki bir öğeyi günceller.
C'de, bir dizi boyutla başlatıldığında, öğelerine aşağıdaki sırayla varsayılan değerleri atar.
Veri tipi | Varsayılan değer |
---|---|
bool | yanlış |
kömür | 0 |
int | 0 |
yüzer | 0.0 |
çift | 0.0f |
geçersiz | |
wchar_t | 0 |
Travers İşlemi
Bu işlem, bir dizinin öğeleri arasında gezinmektir.
Misal
Aşağıdaki program bir dizinin öğelerini tarar ve yazdırır:
#include <stdio.h>
main() {
int LA[] = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;
printf("The original array elements are :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
}
Yukarıdaki programı derleyip yürüttüğümüzde, aşağıdaki sonucu verir -
Çıktı
The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
Yerleştirme İşlemi
Ekleme işlemi, bir diziye bir veya daha fazla veri öğesi eklemektir. Gereksinime bağlı olarak, dizinin başına, sonuna veya herhangi bir dizinin başına yeni bir öğe eklenebilir.
Burada, dizinin sonuna veri eklediğimiz yerleştirme işleminin pratik bir uygulamasını görüyoruz -
Misal
Yukarıdaki algoritmanın uygulanması aşağıdadır -
#include <stdio.h>
main() {
int LA[] = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;
printf("The original array elements are :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
n = n + 1;
while( j >= k) {
LA[j+1] = LA[j];
j = j - 1;
}
LA[k] = item;
printf("The array elements after insertion :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
}
Yukarıdaki programı derleyip yürüttüğümüzde, aşağıdaki sonucu verir -
Çıktı
The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
The array elements after insertion :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 10
LA[4] = 7
LA[5] = 8
Diğer dizi ekleme işlemi varyasyonları için burayı tıklayın
Silme İşlemi
Silme, mevcut bir öğeyi diziden kaldırmayı ve bir dizinin tüm öğelerini yeniden düzenlemeyi ifade eder.
Algoritma
Düşünmek LA doğrusal bir dizidir N elementler ve K öyle bir pozitif tamsayıdır K<=N. LA'nın K inci konumunda bulunan bir elemanı silme algoritması aşağıdadır.
1. Start
2. Set J = K
3. Repeat steps 4 and 5 while J < N
4. Set LA[J] = LA[J + 1]
5. Set J = J+1
6. Set N = N-1
7. Stop
Misal
Yukarıdaki algoritmanın uygulanması aşağıdadır -
#include <stdio.h>
void main() {
int LA[] = {1,3,5,7,8};
int k = 3, n = 5;
int i, j;
printf("The original array elements are :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
j = k;
while( j < n) {
LA[j-1] = LA[j];
j = j + 1;
}
n = n -1;
printf("The array elements after deletion :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
}
Yukarıdaki programı derleyip yürüttüğümüzde, aşağıdaki sonucu verir -
Çıktı
The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
The array elements after deletion :
LA[0] = 1
LA[1] = 3
LA[2] = 7
LA[3] = 8
Arama İşlemi
Bir dizi elemanı için değerine veya indeksine göre arama yapabilirsiniz.
Algoritma
Düşünmek LA doğrusal bir dizidir N elementler ve K öyle bir pozitif tamsayıdır K<=N. Aşağıda, sıralı arama kullanarak ITEM değerine sahip bir eleman bulmaya yönelik algoritma verilmiştir.
1. Start
2. Set J = 0
3. Repeat steps 4 and 5 while J < N
4. IF LA[J] is equal ITEM THEN GOTO STEP 6
5. Set J = J +1
6. PRINT J, ITEM
7. Stop
Misal
Yukarıdaki algoritmanın uygulanması aşağıdadır -
#include <stdio.h>
void main() {
int LA[] = {1,3,5,7,8};
int item = 5, n = 5;
int i = 0, j = 0;
printf("The original array elements are :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
while( j < n){
if( LA[j] == item ) {
break;
}
j = j + 1;
}
printf("Found element %d at position %d\n", item, j+1);
}
Yukarıdaki programı derleyip yürüttüğümüzde, aşağıdaki sonucu verir -
Çıktı
The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
Found element 5 at position 3
Güncelleme İşlemi
Güncelleme işlemi, belirli bir dizindeki dizideki mevcut bir öğeyi güncellemeyi ifade eder.
Algoritma
Düşünmek LA doğrusal bir dizidir N elementler ve K öyle bir pozitif tamsayıdır K<=N. LA'nın K inci konumunda bulunan bir elemanı güncellemek için algoritma aşağıdadır.
1. Start
2. Set LA[K-1] = ITEM
3. Stop
Misal
Yukarıdaki algoritmanın uygulanması aşağıdadır -
#include <stdio.h>
void main() {
int LA[] = {1,3,5,7,8};
int k = 3, n = 5, item = 10;
int i, j;
printf("The original array elements are :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
LA[k-1] = item;
printf("The array elements after updation :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
}
Yukarıdaki programı derleyip yürüttüğümüzde, aşağıdaki sonucu verir -
Çıktı
The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
The array elements after updation :
LA[0] = 1
LA[1] = 3
LA[2] = 10
LA[3] = 7
LA[4] = 8