Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Linked list yani diğer adıyla bağlı listeler C++ dilinde en çok kullanılan veri yapılarından biridir. Özellikle Queue ve Stack yapılarını uygulamaya geçirmek için kullanılır. Buradaki ana nokta yarattığımız node’ları pointerlarla bir sonraki node’a bağlamak ve bu şekilde dinamik olarak listemizin eleman sayısını istediğimiz kadar arttırabilmek. Linked listlerin arraylardan farkı arraylar gibi fix bir boyuta sahip olmamalarıdır bu da bize hem bellekten tasarruf sağlar hem de eleman sayısını bilemediğimiz algoritmaları kurmamızda büyük ölçüde yardım sağlar.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
#include <iostream>
using namespace std;
class node//ihtiyacımız olan datayı girmek ve link listteki pointerları yaratmak için gerekli olan verilere
//sahip olan node isimli bir class yarattık.
{
public:
int veri;
node *sonraki; //bir sonraki elemanı bağlayacak pointer
};
class liste//listeyi oluşturacak fonksiyonların tanımlandığı list isimli class
{
private:
node *ilk;//listemizin ilk elemanı için bir pointer tanımladık
public:
liste()//default constructer'ımızı yarattık.
{
ilk=NULL;//first pointerımızı null yaptık ki ilk başta listemiz boş olsun.
}
void eleman_ekle(int x)
{
node *tmp=new node; //geçici bir tmp pointerı atadık
tmp->veri=x; // ekleyecek oldugumuz elemanı geçici pointerımızın datasına gönderdik.
tmp->sonraki=ilk;// önceden tanımlamış olduğumuz bağlayıcı pointerımızı ilk eklediğimiz
//elemanın adresine atıyoruz
ilk=tmp; // son olarak da atadığımız pointerları birbirine eşitliyoruz.
}
void eleman_sil(int x)
{
node *tmp;//yine gecici bir pointer atadık.
int sayac=0;
for(tmp=ilk;tmp!=NULL;tmp=tmp->sonraki) // istediğimiz elemanı silebilmek için tüm listeyi dolaşmamız
{//için bu for döngüsünü yazdık.
if(tmp->veri==x)//silmek istediğimiz elemanın listede olma durumu
sayac++;
}
if(sayac!=0) //eğer aradığımız silmek istedğimiz eleman listedeyse
{
if(ilk->veri==x)
{
tmp=ilk; //bu iki satırda silme işlemini yapıyoruz.
ilk=tmp->sonraki;
}
else
{
for(tmp=ilk;tmp->sonraki->veri!=x;tmp=tmp->sonraki){}
tmp->sonraki=tmp->sonraki->sonraki;// bu satırda ise 2 satır sonraki elemanın pointerını bir önceki elemanın adresine atıyoruz.
}
}
else
{
cout<<" BULUNAMADI !"<<endl;//elemanın listede olmama durumu.
}
}
void yazdir()
{
node *tmp;
for(tmp=ilk;tmp!=NULL;tmp=tmp->sonraki) //listedeki tüm nodeları dolaşmamızı sağlayan for döngüsü
{
cout<<" _____"<<endl;
cout<<" "<<tmp->veri<<endl;//tüm elemanların adresine ulaşma yöntemimiz
}
}
void arama(int x) // arama fonksiyonumuz
{
node *tmp;
int sayac=0;
for(tmp=ilk;tmp!=NULL;tmp=tmp->sonraki)
{
if(tmp->veri==x)//aradığımız eleman listedeyse sayacı 1 arttırıyoruz.
sayac++;
}
if(sayac!=0)//eğer sayaç artmış ise eleman bulunmuştur
{
cout<<"Eleman Bulundu.."<<endl;
}
else
{
cout<<"Eleman listede yok.."<<endl;
}
}
};
int main()
{
liste a;// bir obje yaratıyoruz
a.eleman_ekle(25);//objeleri kullanarak yazdığımız tüm fonksiyonları çağırabiliriz.
a.eleman_ekle(45);
a.eleman_ekle(67);
a.eleman_ekle(13);
a.eleman_ekle(56);
a.eleman_ekle(49);
a.eleman_ekle(35);
a.eleman_ekle(84);
a.eleman_sil(84);
a.arama(84);
a.yazdir();
system("pause");
return 0;
}