Home / C Kodları / Dizideki Belirli Bir İndisi Silen C Kodu

Dizideki Belirli Bir İndisi Silen C Kodu

Bu yazımızda dizi üzerinde kullanıcının belirttiği bir indisi silen C Kodunu yazacağız. Temel amaç dizi veri yapısı üzerindeki bir elemanın nasıl silineceğini anlamak ve dizideki kritik işlemi gerçekleştirmek. Peki nedir bu kritik işlem? Dizide bir yeri boşalttığımızda boşalan yere geriye kalan elemanlar yerleştirilmelidir. Bunun için de dizi içerisinde kaydır işlemi gerçekleştiririz. Aslında size anlatacağımız bu kodun amacı dizideki elemanları kaydırmayı öğrenmektir.

Dikkat etmeniz gereken bir kritik nokta da bu yazılımın dizideki belirli bir elemanı silmediği, belirli bir pozisyondaki elemanı silmesidir. Yani direkt random access yaparak silme olanağına sahibiz. Ancak yine kaydırma işlemi yapmamız gerekeceğinden (Son indisteki eleman silinirse gerek kalmaz, geriye kalan bütün pozisyonlar için kaydırma yapılır) işlem karmaşıklığının yine O(n)’e yakın olduğunu bilmeniz gerekir. Evet aslında diziler biraz da bu yüzden kötüdür ve C gibi dillerde bağlı listeler daha çok tercih edilir. Neyse bu konuya fazla dalmayalım ve kodu paylaşalım. Kodun içerisindeki comment satırlarında Dizideki Belirli bir indisi silen mantığı açık şekilde anlattık. Buyrun.


#include<stdio.h>

//********************************************//
//************* Algoritma Uzmanı *************//
//*********** www.algoritmauzmani.com ********//
//********************************************//

int main() {
   //Genel değişkenlerimizi okuduk
   int dizi[50], sayi, i, lokasyon;

   //Kullanıcıdan kaç adet eleman girileceği bilgisini alıyoruz
   printf("\nKac Adet Eleman Gireceksiniz? :");
   scanf("%d", &sayi);

   //Elemanları kullanıcıdan alıp diziye aktarıyoruz

   for (i = 0; i < sayi; i++) {
      printf("%i. Sayiyi Girin ...", i + 1);
      scanf("%d", &dizi[i]);
   }

   //Aşağıdaki döngü dizinin mevcut halini ekrana basıyor
   for (i = 0; i < sayi; i++)
   {
      printf("\ndizi[%d] ==> %d",i, dizi[i]);
   }
   printf("\nDizinin mevcut hali yukaridaki gibidir...");

   //Burada kullanıcıdan indis numarası istiyoruz. Dikkat edin silinmek istenen elemanı istemiyoruz, indisi istiyoruz. 
   printf("\n Hangi Indisteki Elemani Silmek Istiyorsunuz :");
   scanf("%d", &lokasyon);

   //Aşağıdaki döngü hem silme işlemini yapıyor, hem de silmek istediğimiz lokasyondan büyük sayıları dizide bir indis geri kaydırıyor.
   while (lokasyon < sayi) {
      dizi[lokasyon - 1] = dizi[lokasyon];
      lokasyon++;
   }
   
   //Dizimizden 1 eleman sildiğimiz için sayi değişkeni 1 azaldı.
   sayi--;

   //Bu for döngüsü dizideki elemanı sildikten sonraki halini basıyor.
   for (i = 0; i < sayi; i++)
      printf("\ndizi[%d] => %d", i, dizi[i]);

   printf("\nDizinin yeni hali yukaridaki gibidir...");

   return (0);
}


Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir