Professional Documents
Culture Documents
Kaynak
• Algoritma Geliştirme ve Veri Yapıları, Toros Rifat ÇÖLKESEN,
Papatya Yayıncılık, 3. Basım
Veri Modelleri
• Veri modelleri, veriler arasındaki ilişkisel ve sırasal düzeni gösteren
kavramsal tanımlardır.
• Her program en azından bir veri modeline dayanır. Program için
uygun veri modelinin seçilmesi en etkin programın yazılmasını sağlar.
• Bilinen veri modellerinin bazıları şu şekilde sıralanabilir.
• Bağlantılı liste
• Ağaç
• Graf
• Durum makinası
• Veritabanı-ilişkisel
• Ağ bağlantı
• Bir uygulama bu veri modellerinden birine yaklaştırlırsa
gerçekleştirilmesi kolaylaşır. Çünkü bilinen veri modelleri ile yazılmış
bir çok algoritma vardır ve programcı bu algoritmaları kendi
uygulaması için rahatça kullanabilir.
• Uygun veri modeline dayanmayan tasarımlar çoğu zaman giderilmesi
güç sorunlara yol açarlar.
Örnek Veri Modelleri
Bağlantılı Liste
Ağaç
Graf
Bağlantılı Liste
• Bağlantılı liste aynı kümeye ait verilerin bellek üzerinde birbirlerine
sanal olarak bağlanması ile oluşturulur.
• Bağlantılı liste veri yapısında temel olarak iki kısım bulunur.
Bunlardan ilki verinin kendisi için diğeri ise bağlantı için kullanılan
kısımlardır. Veri kısmında bir veya birden fazla veri bulunabilir.
Bağlantı kısmı ise bir işaretçi içerir. Bu işaretçi ait olduğu verinin
bağlantısı nereye yapılacaksa orayı işaret eder.
• Bağlantılı liste bilgisayar biliminde önemli bir yere sahiptir. Bu veri
yapısı hem tek başına belli problemlerin çözümü için hem de diğer
veri yapılarının içerisinde ara bileşen olarak kullanılmaktadır.
• Bağlantılı listenin dezavantajı liste üzerindeki ara elemanlara hızlıca
erişilememesi ve arama gerektiren uygulamalarda algoritma
karmaşıklılığının yüksek olmasıdır.
Veri parçalarının Bağlantı bilgisinin
koyulacağı kısım tutulacağı kısım,
işaretçi
Veri Bağ
#include <iostream>
#include<stdlib.h>
using namespace std;
// listedeki veri yapısının tanımlanması
typedef struct topluluk {
int bilgi;
char mesaj[100];
struct topluluk *arka;
}BAGLISTE;
}
default:cout<<"Yanlıs Secim !! "<<endl;
}
}
system("pause");
return 0;
}
// Devamı sonraki sayfada
Tek Yönlü Bağlantılı Liste Uygulaması
TAM ÖRNEK
// fonksiyonlar
void yazEkrana(BAGLISTE *yazilacak){
printf("bilgi: %d, mesaj:%s\n",yazilacak->bilgi, yazilacak->mesaj);
}
int ekle(BAGLISTE *ki){
if(ilk!=NULL)
{son->arka=ki;
son=ki;
son->arka=NULL; }
else{
ilk=ki;
son=ilk;
ilk->arka=NULL;
}
return 0;
}
// Devamı sonraki sayfada
Tek Yönlü Bağlantılı Liste Uygulaması
TAM ÖRNEK
int listele(){
BAGLISTE *p;
p=ilk;
if (p==NULL) return -1;
while(p!=NULL){
yazEkrana(p);
p=p->arka;
}
return 0;
}
BAGLISTE *ara(int aranan)
{
BAGLISTE *p; p=ilk;
while(p!=NULL){
if(p->bilgi==aranan) return p;
p=p->arka;
}
return NULL;
}
// Devamı sonraki sayfada
Tek Yönlü Bağlantılı Liste Uygulaması
TAM ÖRNEK
BAGLISTE *sil(int silinecek)
{
BAGLISTE *p, *bironceki;p=ilk;
bironceki=NULL;
while(p!=NULL){
if(silinecek==p->bilgi) break;
bironceki=p;p=p->arka;}
if (p!=NULL){
if(bironceki==NULL){
if (ilk==son){
ilk==NULL;son==NULL;
}
else ilk=ilk->arka;
}
else{ bironceki->arka=p->arka;
if(bironceki->arka==NULL) son=bironceki;}
free(p);return p;}
else return NULL;
} // Devamı sonraki sayfada
Tek Yönlü Bağlantılı Liste Uygulaması
TAM ÖRNEK
BAGLISTE *okuKlavye(){
BAGLISTE *okunan;
okunan=new BAGLISTE;
if (okunan==NULL)
return NULL;
cout<<"Bilgi Giriniz"<<endl;
scanf("%d",&(okunan->bilgi));
cout<<"Mesaj Giriniz"<<endl;
scanf("%s",&(okunan->mesaj));
return okunan;