Aynı class yapısına ait verilerin bellek te bir pointer ( gösterici ) yardımıyla birbirlerine
bağlanmasıyla oluşan veri yapısına sıralı liste denir.
Genel özellik bakımından Bağlı listeler ;
*Liste içindeki elemanların her biri aslında birer nesnedir.
*Her nesne 2 kısımdan oluşur. Data kısmı ve sıranın tutulduğu bir pointer.
*Bağlı listeyi bellekte tutmak için her zaman bir başlangıç pointer ( head ) gerekmektedir ve liste
her zaman bu pointer’dan başlar.
her zaman bu pointer’dan başlar.
*Data kısmı uygulamanın gereklerine göre istenilen her tipte olabilir. String, float, double, int gibi
değerlerden bir ve ye birkaçını anı anda içerebilir.
değerlerden bir ve ye birkaçını anı anda içerebilir.
*Nesnelerin her biri kendi içinde bağlantı bilgisi içeren kendi türünden bir ya da birden fazla
pointer’ sahiptirler.
pointer’ sahiptirler.
*Pointer’ lar herhangi bir nesnenin kendisinden önce ve kendisinden sonra hangi nesne geldiğinin
bilgisini tutar.
bilgisini tutar.
*Bağlı listelerdeki son pointer “ NULL ” dur hiçbir yeri point etmez.
*Bağlı liste herhangi bir veriye göre sıralanabilir ya da serbest olarak linked list halinde
bulunabilir.
bulunabilir.
* Bağlı listeden istenildiği gibi nesne ekleyip nesne çıkartabiliriz.
*Bağlı listeler sıralı listelerdir ama bellekte sıralı olarak bulunmazlar. Birbirlerine sanal olarak
bağlıdırlar .
bağlıdırlar .
* Hafızayı dinamik olarak kullanırlar, nesne silindiğinde hafızadaki yeri hemen boşaltılır. Nesne
eklenirken de sadece eklenecek nesne kadar yer açılır.
eklenirken de sadece eklenecek nesne kadar yer açılır.
-- Genel olarak şekil üzerinde göstermek gerekirse bu şekilde bir yapıya sahiptir:
Programlama kısmına gelince bağlı listelerde eleman ekleme, eleman silme, eleman arama,
listeleme gibi birçok fonksiyon kullanılabilir.
listeleme gibi birçok fonksiyon kullanılabilir.
Öncelikle kodlar c++’ta olduğu için nesnelerimizin datasını ve next pointer’ını tutacak bir class
tanımlamalıyız.
tanımlamalıyız.
CLASS YAPISI:
#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; // bu listedeki tüm elemanlara erişeceğimiz head pointer tanımlamasıdır ve global olarak tanımlamamız gerekir.
EKLE FONKSİYONU:
void list::ekle(int sayi)
{
list *newlist=new list; // eklenecek nense için yer açılır.
newlist->data=sayi; // data ve next pointer lar atanır.
newlist->next=0;
list *p=head; // listede dolaşıcak bir pointer tanımlanır.
if(p==0)
head=newlist;
else
{
while(p->next!=0)
p=p->next;
p->next=newlist; // en sona gelindiğinde eleman eklenmiş olur.
}
}
SİL FONKSİYONU :
void list::sil(int x){
list *p=head;
list *temp=p;
if(p==0)
cout<<"listede eleman yok"<<endl;
else if(p->next==0 && p->data==x) // bir tane eleman var ve onun silindiği yer.
{
delete p; head=0;
}
else if(p==head && p->data==x) // birçok eleman var ve baştakinin silindiği.
{
head=p->next;
delete p;
}
else
{ p=p->next; // diğer durumların siindiği yer .
while(p)
{
if(p->data==x)
{
temp->next=p->next;
break;
}
p=p->next;
temp=temp->next;
}
if(p==0)
cout<<"aradiginiz eleman yok."<<endl;
else
delete p;
}
}
LİSTELE FONKSİYONU:
void list::listele()
{
list *p=head;
int i=1;
if(p==0)
cout<<"liste boss."<<endl;
else
{
while(p) // NULL elemana kadar gidip ekrana yazdırılıyor.
{
cout<<i<<".deger: "<<p->data<<endl;
p=p->next;
i++;
}
}
}
}
SAY FONKSİYONU :
int list::say()
{
int i=0;
list *p=head;
while(p) // NULL elemena kadar gidip sayıyı geri döndürüyor.
{
p=p->next;
i++;
}
return i;
}
MAİN :
int main()
{
list a;
char ch;
int i;
while(1)
{
cout<<"********************************"<<endl<<"Eklemek icin ---->E"<<endl<<"Silmek icin ------>S"<<endl<<"Saymak icin ------>Y"<<endl<<"Listelemek icin -->L"<<endl
<<"Cikis icin ------->C"<<endl<<"********************************"<<endl<<endl;
cin>>ch;
if (ch=='C')break;
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 secenekleri seciniz."<<endl<<endl;
}
}
}
system("PAUSE");
return 0;
}
** Programın çıktısı ise şu şekildedir.
hocam bir az daha aciklama yapsaniz daha iyi olurdu bence ama emege saygi
YanıtlaSil