1-) VERİYAPILARI - ÇİFT YÖNLÜ BAĞLI LİSTE

# include<stdio.h>
# include<stdlib.h>
typedef struct liste
{
int numara;
struct liste *sonraki;
struct liste *onceki;
}
Bliste;
Bliste* ilk = NULL,*son=NULL;
//BAĞLI LİSTEYE VERİYİ EKLEME
void ekle(int deger)
{
Bliste* bilgi = (Bliste*)malloc(sizeof(Bliste)); // bellekte yer ayrıldı
bilgi->numara = deger;
bilgi->sonraki = NULL;
bilgi->onceki = NULL;
if (ilk == NULL)
{
ilk = bilgi;
son = bilgi;
}
else
{
son->sonraki = bilgi;
bilgi->onceki = son;
son = bilgi;
}
}
// BAĞLI LİSTEDEN VERİ ARAMA
int Arama(int aranacakSayi)
{
Bliste* gecici;
gecici = ilk;
while (gecici != NULL)
{
if (gecici->numara == aranacakSayi) return gecici->numara;
else gecici = gecici->sonraki;
}
return 0;
}
//LİSTELEME
void Listele()
{
Bliste* gecici;
for (gecici = ilk; gecici != NULL; gecici = gecici->sonraki)
{
printf("%d\n", gecici->numara);
}
}
//SİLME
void Sil(int silinecekSayi)
{
Bliste* gecici,*onceki;
gecici = ilk;
onceki = ilk;
if (ilk->numara == silinecekSayi)
{
ilk = ilk->sonraki;
ilk->onceki = NULL;
return;
}
while (gecici->numara != silinecekSayi && gecici->sonraki != NULL)
{
gecici = gecici->sonraki;
}
if (gecici->numara == silinecekSayi)
{
if (gecici->sonraki == NULL)
{
gecici->onceki->sonraki = NULL;
}
else
{
gecici->onceki->sonraki = gecici->sonraki;
gecici->sonraki->onceki = gecici->onceki;
}
}
else
{
printf("eleman yok");
}
}
int main()
{
int dizi[] = { 5, 4, 1, 3, 9 };
for (int i = 0; i < 5; i++)
{
ekle(dizi[i]);
}
printf("EKLEME SONRASI LISTELEME\n");
Listele();
//////////////////////
Sil(1); //aradan değer silindi
Sil(5);// en baştaki değer silindi
Sil(9);//en sondaki değer silindi
printf("SILME SONRASI LISTELEME\n");
Listele();
return 0;
}