Bağlı listeler dizilerdeki gibi boyuta bağlı olmayan dinamik bir yapıdır.Dizilerde boyut önemlidir ve ihtiyaç duyulduğun da yer açabilirsiniz ama bu hem uğraştırıcı hem de pahalı bir işlemdir.Bunun için boyuttan bağımsız bağlı listelere ihtiyaç duyarız.
Yandaki şekilden bahsedelim biraz.Head dediğimiz gösterici(pointer) her zaman listenin ilk elemanını gösterir.Ekleme,silme,arama
gibi işlemleri gerçekleştirirken her zaman headden başlanır.Yandaki her bir düğümde veriler saklanır ve göstericilerle şekildeki gibi birbirine bağlanır.Son düğüm şekildeki gibi kendini yani NULL 'u gösterir.
Gelin bütün işlemleri bir uygulama yaparak görelim.
//Öncelikle sınıfımızı(class) oluşturalım.
#include<iostream>
using namespace std;
class list
{ int data;
list *next;
public:
list(){};
void ekle(int);
void sil(int);
void listele();
int say();
};
list *head;
//1-ELEMAN EKLEMEK
void list::ekle(int sayi) //sınıfımızın üyesini tanımladık.
{
list *newlist=new list; //burada eklenecek yeni düğüm için yer açılır.
newlist->data=sayi; //düğümümüzün elemanı eklenir
newlist->next=0;
list *p=head;
if(p==0) //listede hiç eleman olmamasıdır.
head=newlist;
else
{
while(p->next!=0)
p=p->next;
p->next=newlist;
}
}
//2-ELEMAN SİLMEK
void list::sil(int x){
list *p=head;
list *temp=p;
if(p==0) //liste boş olduğunda uyarı verir.
cout<<"Listede eleman yok"<<endl;
else if(p->next==0 && p->data==x) //listede tek eleman vardır ve silmek istenen elemandır
{
delete p; head=0;
}
else if(p==head && p->data==x) //listedeki ilk eleman silmek istediğiniz elemandır.
{
head=p->next;
delete p;
}
else
{ p=p->next;
while(p)
{
if(p->data==x)
{
temp->next=p->next;
break;
}
p=p->next;
temp=temp->next;
}
if(p==0) // eğer tüm liste dolaşılmış ancak bulunamamışsa uyarı verir.
cout<<"Aradiginiz eleman yok."<<endl;
else
delete p;
}
}
//3-ELEMANLARI LİSTELEMEK
void list::listele()
{
list *p=head;
int i=1;
if(p==0)
cout<<"Liste Bos."<<endl;
else
{
while(p)
{
cout<<i<<".deger: "<<p->data<<endl;
p=p->next;
i++;
}
}
}
//4-ELEMANLARI SAYMAK
int list::say()
{
int i=0;
list *p=head;
while(p)
{
p=p->next;
i++;
}
return i;
}
//ve son olarak main kısmı...
int main()
{
list a;
char ch;
int i;
do
{
cout<<"MENU:"<<endl<<"1-Eklemek icin (E)"<<endl<<"2-Silmek icin (S)"<<endl<<"3-Saymak icin (Y)"<<endl<<"4-Listelemek icin (L)"<<endl
<<"5-Cikis icin (P)"<<endl<<"seciniz..."<<endl<<endl;
cin>>ch;
switch(ch)
{
case 'E':
{
cout<<"eklemek istediginiz veriyi giriniz."<<endl<<endl;
cin>>i;
a.ekle(i);
break;
}
case 'S':
{
cout<<"silmek istediginiz veriyi giriniz."<<endl<<endl;
cin>>i;
a.sil(i);
break;
}
case'Y':
{
cout<<"listedeki sayi: "<<a.say()<<endl<<endl;
break;
}
case 'L':
{
a.listele();
break;
}
case'P':
break;
default:
{
cout<<"Lutfen menudeki seceneklerden birini seciniz."<<endl<<endl;
}
}
}while(ch!='P');
system("PAUSE");
return 0;
}
Hiç yorum yok:
Yorum Gönder