11
May
2022

Veri yapıları ve algoritmalar dersi 7. slayt – Bağlı listeler

Slayt ana hatları

Please wait while flipbook is loading. For more related info, FAQs and issues please refer to DearFlip WordPress Flipbook Plugin Help documentation.

Animasyonlu görünüm

Tek yönlü bağlı liste

#include<iostream>
using namespace std;

// Düğüm yapısını tanımla
struct dugum{
  int ID;
  dugum *sonraki;
};

// Bağlı listeye düğüm ekle
dugum *ekle(dugum *kok, dugum *adres, int veri)
{
    if (adres==NULL) // Liste boş
    {
      kok->ID = veri; 
      kok->sonraki = NULL;
      cout<<veri<<" eklendi."<<endl;
      return kok; 
    }
    else if(adres->sonraki == NULL)    // Gösterici son elemanda, düğümü sona ekle
    {
      dugum *yeni = new dugum;
      adres->sonraki = yeni;
      yeni->ID = veri;
      yeni->sonraki = NULL;
      cout<<veri<<" eklendi."<<endl;
      return adres->sonraki;
    }
    else // Yeni düğümü göstericinin gösterdiği araya ekle
    {
      dugum *yeni = new dugum;
      yeni->sonraki = adres->sonraki;
      adres->sonraki = yeni;
      yeni->ID = veri;
      cout<<veri<<" eklendi."<<endl;
      return adres->sonraki;
    }
}

// Bağlı listeden düğüm sil
dugum* sil(dugum* adres ,int veri)
{
  if (adres->ID == veri) // Silinecek düğüm ilk sırada
  {
    dugum *temp = adres;
    adres = adres->sonraki;
    delete(temp);
    cout<<veri<<" ilk dugumdeydi ve silindi."<<endl;
    return adres; 
  }
  else // Listede birden fazla düğüm var
  {
    dugum *oncekiDugum = NULL;
    dugum *kok = adres;
    while (adres!= NULL) // Silinecek düğümü bulmak için arama yap
    {				
      if (adres->ID == veri) // Düğüm bulundu mu?
      {
        oncekiDugum->sonraki = adres->sonraki;	
        delete(adres);
        cout<<veri<<" silindi."<<endl;
        return kok;
      }
      oncekiDugum = adres;
      adres = adres->sonraki;	
    }
    return kok;
  }	
}

// Bağlı listeyi yazdır
void yazdir(dugum *adres)
{
  if (adres==NULL) 
  {
    cout<<"Liste bos"<<endl;
  }
  else
  {
    while(adres!=NULL)
   	{
      cout<<adres->ID<<endl;
      adres = adres->sonraki;
    }
  }	
  
}

//Bağlı listede arama
dugum *ara(dugum *adres, int veri)
{
  int siraNo = 0;
  while(adres!=NULL)
  {
    siraNo++;
    if (adres->ID == veri)
    {
      cout<<"Aranan veri "<<siraNo<<".dugumde"<<endl;
      return adres;
    }	
    adres = adres->sonraki;
  }
  cout<<"Veri bulunamadi."<<endl;
  return NULL;
}

int main()
{
  // Yeni bağlı liste oluştur
  dugum *kok = new dugum;
  kok->sonraki = NULL;
  
  // Gosterici oluştur
  dugum *gosterici = NULL;
  
  // Örnek birkaç düğüm ekle
  gosterici = ekle(kok, gosterici, 10);
  gosterici = ekle(kok, gosterici, 20);
  gosterici = ekle(kok, gosterici, 30);
  gosterici = ekle(kok, gosterici, 40);
  
  // Bağlı listeyi yazdır
  yazdir(kok);
  
  // Listede değer ara
  ara(kok, 11);
  ara(kok, 20);
  
  // Listeden düğüm sil
  kok = sil(kok, 10);
  kok = sil(kok, 30);
  
        // Listeyi yazdır
  yazdir(kok);
  
  gosterici = ekle(kok, gosterici, 50);
  yazdir(kok);	
}

Dairesel bağlı liste

#include<iostream>
using namespace std;

// Düğüm yapısı tanımla
struct dugum{
  int ID;
  dugum *sonraki;
};


// Bağlı listeye düğüm ekle
dugum *ekle(dugum *kok, dugum *adres, int veri)
{
    if (adres==NULL) // Liste boş. Gelen adres verisi kök adresini gösteriyor
    {
      kok->ID = veri; 
      kok->sonraki = kok;
      cout<<veri<<" eklendi."<<endl;
      adres = kok;
      return kok; 			
    }
    else // Göstericinin gösterdiği araya düğüm ekle
    {
      dugum *yeni = new dugum;
      yeni->sonraki = adres->sonraki;
      adres->sonraki = yeni;
      yeni->ID = veri;
      cout<<veri<<" eklendi."<<endl;
      return adres->sonraki;
    }
}

// Bağlı listeden düğüm sil
dugum* sil(dugum* adres ,int veri)
{
  // Listede tek düğüm var
  if (adres == adres->sonraki)
  {
    if (adres->ID == veri)
    {
      delete(adres);
      cout<<veri<<" ilk dugumdeydi ve silindi."<<endl;
      return NULL;
    }
    else cout<<"Bulunamadi";
  }
  else // Listede birden fazla düğüm var
  {
    dugum *oncekiDugum = adres;		
    dugum *kok = adres;
    adres = adres->sonraki;
    do// Silinecek düğümü ara
    {				
      if (adres->ID == veri) // Düğüm bulundu mu?
      {
        oncekiDugum->sonraki = adres->sonraki;	
        if (adres!=kok) // kökü gösteren eleman silinmedi
        {
          delete(adres);
          return kok;
        }
        else  // Kökü gösteren eleman silindi. Kök bir sağdaki elemana kayacak
        {
          delete(adres);
          return oncekiDugum->sonraki;
        }
        cout<<veri<<" silindi."<<endl;				
      }
      oncekiDugum = adres;
      adres = adres->sonraki;	
    }while (adres!= kok->sonraki);
    return kok;
  }
}

//Bağlı listeyi yazdır
void yazdir(dugum *adres)
{
  dugum* baslangic = adres; 
  if (adres==NULL) 
  {
    cout<<"Liste bos"<<endl;
  }
  else
  {
    do
   	{
      cout<<adres->ID<<endl;
      adres = adres->sonraki;
    }while(adres!=baslangic);
  }	
  
}

// Bağlı listede ara
dugum *ara(dugum *adres, int veri)
{
  int siraNo = 0;
  dugum* baslangic = adres; 
  do
  {
    siraNo++;
    if (adres->ID == veri)
    {
      cout<<"Aranan veri "<<siraNo<<".dugumde"<<endl;
      return adres;
    }	
    adres = adres->sonraki;
  }while((adres!=NULL) && (baslangic!=adres));
  cout<<"Veri bulunamadi."<<endl;
  return NULL;
}

int main()
{
  // Yeni bağlı liste oluştur
  dugum *kok = new dugum;
  kok->sonraki = NULL;
  
  // Gösterici oluştur
  dugum *gosterici = NULL;
  
  // Örnek düğümler ekle
  gosterici = ekle(kok, gosterici, 10);
  gosterici = ekle(kok, gosterici, 20);
  gosterici = ekle(kok, gosterici, 30);
  gosterici = ekle(kok, gosterici, 40);
  
  // Listeyi yazdır
  //yazdir(kok);
  
  // Listede deðer ara
  //ara(kok, 20);
  //ara(kok, 20);
  
  // Listeden düğüm sil
  cout<<"silme"<<endl;
  kok = sil(kok, 10);
  kok = sil(kok, 30);

  gosterici = ekle(kok, gosterici, 50);
  yazdir(kok);	
}

Çift yönlü bağlı liste

#include<iostream>
using namespace std;

// Düğüm yapısını tanımla
struct dugum{
  int ID;
  dugum *sonraki;
  dugum *onceki;
};

// Bağlı listeye düğüm ekle
dugum *ekle(dugum *kok, dugum *adres, int veri)
{
    if (adres==NULL) // Liste boş
    {
      kok->ID = veri; 
      kok->sonraki = NULL;
      kok->onceki = kok;
      cout<<veri<<" eklendi."<<endl;
      return kok; // Kökün gösterdiði ilk eleman yazýldý. Gösterici artýk o elemaný gösteriyor			
    }
    else if(adres->sonraki == NULL)    // Gösterici son elemanda, düğümü sona ekle
    {
      dugum *yeni = new dugum;
      adres->sonraki = yeni;
      yeni->ID = veri;
      yeni->sonraki = NULL;
      yeni->onceki = adres;
      cout<<veri<<" eklendi."<<endl;
      return adres->sonraki;
    }
    else // Düğümü göstericinin gösterdiği araya ekle
    {
      dugum *yeni = new dugum;
      yeni->sonraki = adres->sonraki;
      yeni->sonraki->onceki = yeni;
      yeni->onceki = adres;
      adres->sonraki = yeni;
      yeni->ID = veri;
      cout<<veri<<" eklendi."<<endl;
      return adres->sonraki;
    }
}

// Bağlı listeden düğüm sil
dugum* sil(dugum* adres ,int veri)
{
  if (adres->ID == veri) 
  {
    if (adres->sonraki==NULL) // Listede tek düğüm var
    {
      delete adres;
      cout<<"liste silindi"<<endl;
      return NULL;
    }
    else  // Listede başka düğümler de var ama ilk düğüm silinecek
    {
      dugum *temp = adres;
      adres = adres->sonraki;
      adres->onceki = adres;
      delete(temp);
      cout<<veri<<" ilk dugumdeydi ve silindi."<<endl;
      return adres; 
    }		
  }
  else // Listede birden fazla düğüm var
  {
    dugum *oncekiDugum = NULL;
    dugum *kok = adres;
    while (adres!= NULL) // Silinecek düğümü ara
    {				
      if (adres->ID == veri) // Düğüm bulundu mu?
      {
        oncekiDugum->sonraki = adres->sonraki;	
        adres->sonraki->onceki = oncekiDugum;
        delete(adres);
        cout<<veri<<" silindi."<<endl;
        return kok;
      }
      oncekiDugum = adres;
      adres = adres->sonraki;	
    }
    return kok;
  }	
}

// Bağlı listeyi yazdır 
void yazdir(dugum *adres)
{
  if (adres==NULL) 
  {
    cout<<"Liste bos"<<endl;
  }
  else
  {
    while(adres!=NULL)
   	{
      cout<<adres->ID<<endl;
      adres = adres->sonraki;
    }
  }	
  
}

// Bağlı listede arama
dugum *ileriara(dugum *adres, int veri)
{
  int siraNo = 0;
  while(adres!=NULL)
  {
    siraNo++;
    if (adres->ID == veri)
    {
      cout<<"Aranan veri "<<siraNo<<".dugumde"<<endl;
      return adres;
    }	
    adres = adres->sonraki;
  }
  cout<<"Veri bulunamadi."<<endl;
  return NULL;
}

dugum *geriara(dugum *kok, dugum *son, int veri)
{
  int siraNo = 0;
  dugum *gosterici = son;
  while(gosterici!=kok)
  {
    siraNo++;
    if (gosterici->ID == veri)
    {
      cout<<"Aranan veri "<<siraNo<<".dugumde"<<endl;
      return gosterici;
    }	
    gosterici = gosterici->onceki;
  }
  cout<<"Veri bulunamadi."<<endl;
  return NULL;
}

int main()
{
  // Yeni bağlı liste oluştur
  dugum *kok = new dugum;
  kok->sonraki = NULL;
  
  // Gösterge oluştur
  dugum *gosterici = NULL;
  
  // Örnek düğümler ekle
  gosterici = ekle(kok, gosterici, 10);
  gosterici = ekle(kok, gosterici, 20);
  gosterici = ekle(kok, gosterici, 30);
  
  // Bağlı listeyi yazdır
  yazdir(kok);
  
  // Listede değer ara
  ileriara(kok, 40);
  
  // Geri arama için önce listenin sonuna git
  son = kok;
  while(son->sonraki!=NULL) son = son->sonraki;
  geriara(kok, son, 30);
  
  // Listeden düğüm sil
  kok = sil(kok, 10);
  kok = sil(kok, 20);
  kok = sil(kok, 30);
  
  // Listeyi yazdır
  yazdir(kok); 
  
  gosterici = ekle(kok, gosterici, 50);
  yazdir(kok);	
}

 

%d blogcu bunu beğendi: