You are on page 1of 86

Y. Do. Dr.

Aybars UGUR
T.C.
EGE NIVERSITESI
MHENDISLIK FAKLTESI
BILGISAYAR MHENDISLIGI BLM








VER YAPILARI
DERS NOTLARI



















Y. Do. Dr. Aybars UGUR








Agustos, 2002
ZMR

Y. Do. Dr. Aybars UGUR

NDEKLER

VER YAPILARI GR$ .......................................................................... 1
1. C PROGRAMLAMA............................................................................... 2
2. JAVA PROGRAMLAMA ....................................................................... 8
3. ZYNELEME (RECURSION)............................................................ 28
4. AGALAR (TREES) ............................................................................. 40
5. YIGIT (STACK)..................................................................................... 49
6. KUYRUKLAR (QUEUES) .................................................................... 57
7. LSTELER ve BAGLI LSTELER (LINKED LISTS) ........................ 60
8. ALGORTMALARIN KAR$ILA$TIRILMASI.................................. 67
9. SIRALAMA............................................................................................ 72
10. ZGELER (GRAPHS) ve UYGULAMALARI ................................ 78
JAVA'DA HAZIR VER YAPILARI ve KOLEKSYONLAR (EK)...... 81



VERI YAPILARI (Gz 2002-2003) Giri
Y. Do. Dr. Aybars UGUR 1
VER YAPILARI GR$

Algoritma : Bir probIcmin zmndc kuIIaniIan komutIar dizisi. Bir probIcmi
zmck iin gcIitiriImi kcsin bir yntcmdir. Bir aIgoritma, bir programIama
dilinde (Java, C, Pascal gibi) iIadc cdiIdigindc program adini aIir.

Veri : AIgoritmaIar taraIindan iIcncn cn tcmcI cIcmanIar ( sayisaI biIgiIcr,
mctinscI biIgiIcr, rcsimIcr, scsIcr vc girdi, ikti oIarak vcya ara hcsapIamaIarda
kuIIaniIan digcr biIgiIcr ... ). Bir aIgoritmanin ctkin, anIaiIir vc dogru oIabiImcsi
iin, aIgoritmanin iIcycccgi vcriIcrin dzcnIcnmcsi gcrckir.

Veri Yaplar : VcriIcrin dzcnIcnmc biimini bcIirIcycn yapitaIaridir. Bir
program dcgikcni biIc basit bir vcri yapisi oIarak kabuI cdiIcbiIir. Dcgiik
algoritmaIarda vcriIcrin diziIcr, yigitIar, kuyrukIar, agaIar vc izgcIcr gibi vcri
yapiIari ckIindc dzcnIcnmcsi gcrckcbiIir.

Veri, Yap ve Algoritma
Bir programda vcri, yapi vc aIgoritma birbirindcn ayriImaz biIccnIcrdir vc hcr
biri nemlidir. Verilerin dzcnIcnmc biimIcri ncmIidir. nk, yapi iyi
tasarIandiginda, ctkin, dogru, anIaiIir vc hizIi aIiip az kaynak kuIIanan
aIgoritma gcIitirmck koIayIair.

Veri Tiplerinden Veri Yaplarna
Veri Tipleri : Tamsayi, GcrcI Sayi, Karaktcr ...
Bileyik Veri Tipleri : Dizi, Yapi (kayit), ...
Veri Yaplar : Listc, Yigit, Kuyruk, Aga, izgc, ...

Veri Yaplar (Tekrar)
Liste : SonIu sayida cIcmandan oIuan vc cIcmanIari dogrusaI sirada
ycrIctiriImi vcri yapisi. Hcrhangi bir cIcmanina criimdc sinirIama yoktur.
Ygt : EIcmanIarina criim sinirIamasi oIan, Iistc uyarIi vcri yapisi. LIFO Iistcsi.
Kuyruk : EIcmanIarina criim sinirIamasi oIan, Iistc uyarIi vcri yapisi. FIFO
listesi.

Veri Taban (Database) : Kisaca, iIcnccck vc iIcnmi vcriIcrdcn oIuan bilgi
bankasi oIarak tanimIanabiIir. Vcri yapiIari yani vcriIcrin dzcnIcnmc biimIcri
vcri tabanIarini (databasc) iin dc ncmIidir. rnck oIarak, bir bankadaki
mtcriIcrin biIgiIcri, bir nivcrsitc grctim cIcmanIarina, aIianIarina, dcrsIcrc
iIikin biIgiIcr, vcri tabanIarinda tutuIup iIcnir.

Veri Yaplar :
Statik Vcri YapiIari
Dinamik Vcri YapiIari
VERI YAPILARI (Gz 2002-2003) Blm 1 : C Programlama
Y. Do. Dr. Aybars UGUR 2
VER YAPILARI (DATA STRUCTURES)
BLM 1
C PROGRAMLAMA RNEKLER


1) Basit bir C programi.

#include <stdio.h>

void main()
{
printf("Merhaba \n");
printf("Cye ");
printf("Hogeldiniz ...\n");
}


2) KuIIanicidan iki tamsayi istcycrck bunIarin topIamini, arpimini, Iarkini, bImn
vc bImndcn kaIanini buIup ckrana yazdiran C programi.

#include <stdio.h>

void main()
{
int tamsayi1, tamsayi2;
int toplam, carpim, fark;
float bolum, bolumg; // double

printf("\nlk tamsayiyi giriniz \n");
scanf("%d", &tamsayi1);
printf("kinci tamsayiyi giriniz \n");
scanf("%d", &tamsayi2);

toplam = tamsayi1 + tamsayi2;
carpim = tamsayi1 * tamsayi2;
fark = tamsayi1 - tamsayi2;
bolum = tamsayi1 / tamsayi2;

printf("Toplam = %d arpim = %d Fark = %d Blum = %f Kalan = %d \n",
toplam, carpim, fark, bolum, tamsayi1%tamsayi2);
printf("Gerek Blm = %f", (float)tamsayi1/tamsayi2);
}


// Tamsaylara 3 ve 5 degerlerini vererek program alytrnz.


VERI YAPILARI (Gz 2002-2003) Blm 1 : C Programlama
Y. Do. Dr. Aybars UGUR 3
3) SiniI not ortaIamasini buIan C programi (-1 dcgcri giriIcnc kadar notIari okur).

#include <stdio.h>

float ortalama;
int sayac, notu, toplam;

void main()
{
toplam = 0; sayac = 0;

printf("\nNotu giriniz (iki iin -1): ");
scanf("%d", &notu);

while(notu!=-1)
{
toplam += notu;
++sayac;
printf("\nNotu giriniz (iki iin -1): ");
scanf("%d", &notu);
};

if (sayac==0) printf("Hibir not girilmedi !\n");
else
{
ortalama = (float)toplam/sayac;
printf("Sinif ortalamasi = %f",ortalama);
}
}


4) 1'dcn 10'a kadar oIan sayiIarin karcsini buIup ckrana yazdiran C programi (karc
Ionksiyonu yaziIarak kuIIaniImasi istcniyor).

#include <stdio.h>
int kare(int);

void main()
{ int x;
for(x=1;x<=10;x++) printf("%d ",kare(x));
printf("\n");
}

int kare(int y)
{
return y*y;
}
VERI YAPILARI (Gz 2002-2003) Blm 1 : C Programlama
Y. Do. Dr. Aybars UGUR 4
5) SayiIari kktcn bygc dogru siraIayan C programi (BubbIc Sort).

#include <stdio.h>
#define SIZE 10

void main()
{
int a[SIZE] = { 2,6,4,8,10,12,89,68,45,37 };
int i, pass, hold;

// Siralama ileminden nce sayilarin ekrana yazdirilmasi
printf("\nVeriler orjinal siralarinda listeleniyor \n");
for(i=0; i<=SIZE-1; i++)
printf("%4d ",a[i]);

// Dizinin siralanmasi
for(pass=1;pass<=SIZE-1;pass++)
for(i=0;i<=SIZE-2;i++)
if(a[i]>a[i+1])
{
hold = a[i];
a[i] = a[i+1];
a[i+1] = hold;
}

// Siralama ileminden sonra sayilarin ekrana yazdirilmasi
printf("\nSiralanmi veriler listeleniyor \n");
for(i=0; i<=SIZE-1; i++)
printf("%4d ",a[i]);

printf("\n");
}


Programin ekran iktisi :

Veriler orjinal siralarinda listeleniyor
2 6 4 8 10 12 89 68 45 37
Siralanmis veriler listeleniyor
2 4 6 8 10 12 37 45 68 89


6) String (karaktcr dizisi) iIcmIcri.

char renk[ ] = "Mavi";

dcyimi iIc 5 cIcmanIi bir karaktcr dizisi oIuur :

renk 'M' 'a' 'v' 'i' '\0'

VERI YAPILARI (Gz 2002-2003) Blm 1 : C Programlama
Y. Do. Dr. Aybars UGUR 5

6.1) String kopyalama (strcpy, strncpy).

#include <stdio.h>
#include <string.h>

void main()
{
char cumle[] = "abcdefgghiijklmnoprstu";
char tumcumle[26], parca[15];
printf("\n %s %s \n %s %s \n",
"Cmledeki karakterler :", cumle,
"Kopyalanan karakterler :", strcpy(tumcumle, cumle));
strncpy(parca,cumle,14);
parca[14] = '\0';
printf(" Parca karakter dizisi : %s \n", parca);
}


Programin ekran iktisi :

Cmledeki karakterler : abcdefgghiijklmnoprsstu
Kopyalanan karakterler : abcdefgghiijklmnoprsstu
Parca karakter dizisi : abcdefgghiijk



6.2) String birIctirmc (strcat, strncat).

#include <stdio.h>
#include <string.h>

void main()
{
char s1[] = "C Programlama ";
char s2[] = "Dili";
char s3[40] = "";

printf(" s1 = %s \n s2 = %s \n", s1, s2);
printf("strcat(s1,s2)=%s\n", strcat(s1,s2));
printf("strncat(s3,s1,6) = %s \n", strncat(s3,s1,6));
}


Programin ekran iktisi :

s1 = C Programlama
s2 = Dili
strcat(s1,s2)=C Programlama Dili
strncat(s3,s1,6) = C Prog

VERI YAPILARI (Gz 2002-2003) Blm 1 : C Programlama
Y. Do. Dr. Aybars UGUR 6
7) ok boyutlu diziler

int m[5][3];

Stunlar


0 1 2
0
1
2
3
4



#include <stdio.h>

void printarray(int a[][3])
{
int i, j;
for(i=0; i<2; i++)
{
for(j=0; j<3; ++j)
printf("%3d ",a[i][j]);
printf("\n");
};
}

void main()
{ int tablo1[2][3] = { {1,2,3}, {4,5,6} },
tablo2[2][3] = { 1,2,3,4,5 },
tablo3[2][3] = { {1,2}, {4} };
printf("Matris1 : \n"); printarray(tablo1);
printf("Matris2 : \n"); printarray(tablo2);
printf("Matris3 : \n"); printarray(tablo3);
}

Programin Ekran iktisi :

Matris1 :
1 2 3
4 5 6
Matris2 :
1 2 3
4 5 0
Matris3 :
1 2 0
4 0 0

ALI$TIRMA : Iki matrisi topIayan vc arpan C IonksiyonIarini ckIcyiniz.
Satrlar
VERI YAPILARI (Gz 2002-2003) Blm 1 : C Programlama
Y. Do. Dr. Aybars UGUR 7
8) String'Icri siraIayan C programi (ScIcction Sort).

#include <stdio.h>
#include <conio.h>
#include <string.h>

void main()
{
int i, j, pass, yer;
char veri[5][25] = { "Ali", "Cemil", "Veli", "Abdullah",
"Kemal" };
char enkveri[25], temp[25];

clrscr();

printf("\n");
for(i=0; i<5; ++i) printf("%s ",&veri[i][0]);

for(pass=0; pass<4; ++pass)
{
strcpy(enkveri,&veri[pass][0]);
yer = pass;
for(j=pass+1; j<5; ++j)
{
if((strcmp(&veri[j][0],enkveri))<0)
{ yer = j;
strcpy(enkveri,&veri[yer][0]);
}
}
strcpy(temp,&veri[pass][0]);
strcpy(&veri[pass][0],enkveri);
strcpy(&veri[yer][0],temp);
}

printf("\n");
for(i=0; i<5; ++i) printf("%s ",&veri[i][0]);
}

Programin Ekran iktisi :

Ali Cemil Veli Abdullah Kemal
Abdullah Ali Cemil Kemal Veli
VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 8
BLM 2
JAVA PROGRAMLAMA


Basit bir Java programi :













Programin Yazilmasi ve Derlenmesi :

Herhangi bir ASCII metin editr ile Ornek1.java
programinin yazilmasi
Ornek1.java programinin Java compiler ile
derlenerek Java yorumlayicisinin anlayacagi byte
codelara evrilmesi yani "Ornek1.class" dosyasinin
oluturulmasi

javac Ornek1.java komutu ile

javac
Ornek1.java Ornek1.class


Programin alitirilmasi :

"Java Ornek1" komutu ile uygulama alitirilir.


Ekran iktisi :

Merhaba

// Ekrana, "Merhaba" yazdiran Java Programi
// Ornek1.java
public class Ornek1
{
public static void main(String args[])
{
System.out.println("Merhaba");
}
}

VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 9
BLM 2.1
JAVA PROGRAMLAMA I

Degiken Tanimlama, Aritmetik lemler, String'ler,
I/O lemleri, Metotlar, Diziler (Array), Denetim
Yapilari (if, for, while, ...), GUI ...



ki tamsayiyi toplayan metot :

class Topla
{
public static void main(String args[])
{
System.out.println(topla(5,6));
}

public static int topla(int sayi1,int sayi2)
{
return sayi1+sayi2;
}

}

VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 10




rnek 2.1 : Tamsay, Dng, Dizi, Metot ve Ekrana Yazdrma

int dizi|] 5,6,7,8 }; vcya bcnzcr ckiIdc vcriIcn bir tamsayi dizisinin cIcmanIarinin
topIamini buIan mctodu icrcn java programini yaziniz.

class DiziTopla
{

public static void main(String args[])
{
int dizi[] = { 5,6,7,8 };
System.out.println(topla(dizi));
}

public static int topla(int dizi[])
{
int toplam = 0;
for(int i=0; i<dizi.length; ++i)
toplam+=dizi[i];
return toplam;
}

}



rnek 2.2 : String'ler
VcriIcn bir String dizisini, tcrs sirada (sondan baa dogru) IistcIcycn Java programini
yaziniz.

class DiziListele
{
public static void main(String args[])
{
String strDizi[] = { "Ali", "Zekiye", "Cemil", "Kemal" };

int son = strDizi.length-1;
for(int i=son; i>=0; --i)
{
System.out.println(strDizi[i]);
}
}
}

Ekran iktisi :
Kemal
Cemil
Zekiye
Ali
VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 11
rnek 2.3 : if, if else

VcriIcn bir kii adini bir dizidc arayan vc buIunup buIunamadigini bcIirtcn Java
mctodunu yaziniz. Aranan kiinin String aranan "AIi" ckIindc vcriIdigini
varsayabilirsiniz.

class DiziArama
{

public static void main(String args[])
{
String strDizi[] ={"Ali", "Zekiye", "Cemil", "Kemal"};

String kelime = "Cemil";
if (ara(strDizi,kelime))
System.out.println(kelime+" Dizide Bulundu");
else
System.out.println(kelime+" Dizide Bulunamadi");

kelime = "Yilmaz";
if (ara(strDizi,kelime))
System.out.println(kelime+" Dizide Bulundu");
else
System.out.println(kelime+" Dizide Bulunamadi");
}

public static boolean ara(String dizi[], String aranan)
{
for(int i=0; i<dizi.length; ++i)
if (aranan.equals(dizi[i])) return true;

return false;
}
}

Ekran kts :
Cemil Dizide Bulundu
YiImaz Dizidc BuIunamadi




rnek 2.4 : Bo bir diziyc arka arkaya cIcman ckIcycn mctodu icrcn AppIct'i yaziniz.

import java.applet.Applet;
import java.awt.*;

VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 12
public class DiziElemanEkle extends Applet
{
String strDizi[];
int elemanSayac = 0;

public void init()
{
strDizi = new String[10];

elemanEkle("Ali");
elemanEkle("Cemil");
listele();
}

public void elemanEkle(String yeniEleman)
{
strDizi[elemanSayac]=yeniEleman;
elemanSayac++;
}

public void listele()
{ for(int i=0; i<strDizi.length; ++i)
System.out.println(strDizi[i]); }
}



rnek 2.5 : 2 x 4'lk bir matris oIuturan vc cIcmanIarini IistcIcycn Java programini
yaziniz.

class MatrisListele
{

public static void main(String args[])
{ int matris[][] = { { 5,6,7,8 }, { 9, 10, 11, 12} };
listele(matris); }

public static void listele(int matris[][])
{
for(int i=0; i<matris.length; ++i)
{
for(int j=0; j<matris[i].length; ++j)
System.out.print(matris[i][j]+" ");
System.out.println();
}
}
}
VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 13


rnek 2.6 : String`Icr vc Karaktcr DiziIcri Farki

public class Ornek06
{

public static void main(String args[])
{
char charArray[] = { 'M','e','r','h','a',b',a' };
String s = new String("Merhaba");
String s1,s2;

s1 = new String(s);
s2 = new String(s);

System.out.println("s1="+s1+" "+"s2="+s2+"\n");
if(s1.equals(s2))
System.out.println("Her iki string esit");

System.out.println("Uzunluklar :");
System.out.println("Karakter dizisi+
charArray.length+" karakter");
System.out.println("s1 "+s1.length()+" karakter");
System.out.println("s2 "+s2.length()+" karakter");
}
}


Ekran iktisi :

s1=Merhaba s2=Merhaba

Her iki string esit
Uzunluklar :
Karakter dizisi 7 karakter
s1 7 karakter
s2 7 karakter









VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 14
rnek 2.7 : Bazi String Islemleri

public class Ornek07
{
public static void main(String args[])
{
String s=new String("abcdefghijklmnopqrstuvwxyzabcde");

// e harfinin alfabedeki konumu
System.out.println(s.indexOf('e'));
// e harfinin 20. karakterden sonra konumu
System.out.println(s.indexOf('e',20));
// 5. karakterden 10. karaktere kadar olan string
// parasi
System.out.println(s.substring(5,10));
// String birletirme
System.out.println(s.concat("ABCDEFG"));
// String atama
s = "Merhaba"; System.out.println(s);
}
}


Ekran iktisi :
4
30
fghij
abcdefghijklmnopqrstuvwxyzabcdeABCDEFG
Merhaba


BAST ALI$TIRMALAR

1) VcriIcn bir ismin, bir String dizisindcki kainci cIcman oIdugunu buIan programi
yaziniz.
2) VcriIcn bir ismin, bir String dizisindc ka kcrc tckrarIandigini buIan programi
yaziniz.
3) Bir tamsayi dizisindc, bcIirtiIcn bir sayidan kk ka tanc sayi oIdugunu buIan
programi yaziniz.
4) SiraIi bir tamsayi dizisindcn, vcriIcn bir sayiyi siIcn mctodu yaziniz.
5) SiraIi bir diziyc, vcriIcn bir sayiyi ckIcycn mctodu yaziniz.
6) Parametre olarak gnderilen iki tane matrisi toplayarak nc matrisi elde eden
mctodu yaziniz.
7) Bir matrisin satirIari topIamini bir diziyc aktaran mctodu yaziniz.
8) "Random" sayiIardan oIuturdugunuz 10 cIcmanIi bir dizinin iIt numaraIi
cIcmanIarini bir matrisin iIk satirina, tck numaraIi cIcmanIarini ikinci satirina
yerIctircn Java mctodunu yaziniz.
VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 15
Mesaj ve Girdi Kutulari Kullanimi

rnek 1 :
KuIIanicidan iki tamsayi istcycrck bunIarin topIamini, arpimini, Iarkini, bImn vc
bImndcn kaIanini buIup sonuIari yazdiran Java programi.

import javax.swing.JOptionPane;

public class Ornek1
{
public static void main(String args[])
{
String sayi1, sayi2;
int tamsayi1, tamsayi2, toplam, carpim, fark, kalan;
float bolum;

sayi1=JOptionPane.showInputDialog("1.sayiyi veriniz");
sayi2=JOptionPane.showInputDialog("2.sayiyi veriniz");

tamsayi1 = Integer.parseInt(sayi1);
tamsayi2 = Integer.parseInt(sayi2);

toplam = tamsayi1+tamsayi2;
carpim = tamsayi1*tamsayi2;
fark = tamsayi1-tamsayi2;
bolum = tamsayi1/tamsayi2;
kalan = tamsayi1%tamsayi2;

JOptionPane.showMessageDialog(null,
"Toplam = "+toplam+"\nCarpim = "+carpim+"\nFark = "+fark+
"\nTamsayi Bolum = "+bolum+"\nKalan = "+kalan+
"\nBolum = "+(float)tamsayi1/tamsayi2,
"Sonuclar",JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}

Ekran iktisi : (Metin kutularina 1. sayi iin 15, 2. sayi
iin 4 degerleri girildiginde oluacak sonular)








VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 16
rnek 2 : Not ortaIamasini buIan Java programi (-1 dcgcri giriIcnc kadar notIari
okur).

import javax.swing.JOptionPane;

public class Ornek2
{
public static void main(String args[])
{
float ortalama;
int sayac=0, notu, toplam=0;

String notStr =
JOptionPane.showInputDialog("Notu giriniz (Exit : -1)");
notu = Integer.parseInt(notStr);

while(notu!=-1) {
toplam += notu; ++sayac;
notStr =
JOptionPane.showInputDialog("Notu giriniz (Exit : -1)");
notu = Integer.parseInt(notStr);
};

String s;
if (sayac==0) s = "Not girilmedi!";
else s = "Sinif ort. = "+(float)toplam/sayac;

JOptionPane.showMessageDialog(null,s,
"Sonuclar",JOptionPane.PLAIN_MESSAGE);

System.exit(0);
}
}















VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 17
Diger Bir GUI Bileeni (JTextArea)

rnek 3 : 'Random' saylar (random.java)
AIti yzI bir zarin 1000 kcrc atiImasi sonucu hcr bir yzn kaar kcrc gcIdigini
buIarak IistcIcycn Java Programi.




import javax.swing.*;

public class random
{
public static void main(String args[])
{
int[] frekans; frekans = new int[6];
for (int tekrar=0; tekrar<1000; ++tekrar)
frekans[(int)(Math.random()*6)]++;

JTextArea liste = new JTextArea(7,10);
liste.setEditable(false);
liste.setText("Yuzey \t Frekans");
for(int i=0; i<6; ++i) liste.append("\n"+(i+1)+"\t"+frekans[i]);

JOptionPane.showMessageDialog(null,liste,"Zar Frekans Penceresi",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}







VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 18
Applet Kullanimi

rnek 4 : APPLET ve JTextArea
karc mctodu yardimi iIc, 1'dcn 10'a kadar oIan sayiIarin karcsini buIup ckrana
yazdiran Java programi.

import java.awt.*;
import javax.swing.*;

public class Ornek10 extends JApplet
{
JTextArea listelemeAlani;

public void init()
{
listelemeAlani = new JTextArea();

Container c = getContentPane();
c.add(listelemeAlani);

listelemeAlani.append("n"+"\t"+"kare(n)\n");

for(int i=0; i<10; ++i)
listelemeAlani.append(i+"\t"+kare(i)+"\n");

}

public int kare(int sayi)
{
return sayi*sayi;
}

}


html kodu : Ornek04.html

<html>
<applet code="Ornek04.class" width=300 height=200>
</applet>
</html>

Java programi derlendikten sonra applet,

appletviewer Ornek04.html

komutu verilerek grntlenir.
VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 19
rnek 5 : Siralama
SayiIari kktcn bygc dogru siraIayan Java programi (BubbIc Sort)

import java.awt.*;
import javax.swing.*;

public class Ornek05 extends JApplet
{
JTextArea listelemeAlani;

public void init()
{
listelemeAlani = new JTextArea();

Container c = getContentPane();
c.add(listelemeAlani);

int a[] = { 2,6,4,8,10,12,89,68,45,37 };

// Siralama ileminden nce sayilarin yazdirilmasi
String metin = "Before sorting :\n";
for(int i=0; i<a.length; i++)
metin+=" " + a[i];

// Dizinin siralanmasi
bubbleSort(a);

// Siralama ileminden sonra sayilarin yazdirilmasi
metin+="\n\n After sorting (Ascending order) :\n";
for(int i=0; i<a.length; i++)
metin+=" " + a[i];

listelemeAlani.setText(metin);
}

public void bubbleSort(int b[])
{
for(int pass=1; pass<b.length-1; pass++)
for(int i=0; i<b.length-1; i++)
if(b[i]>b[i+1]) swap(b,i,i+1);
}

public void swap(int c[], int ilk, int ikinci)
{ int gecici = c[ilk]; c[ilk] = c[ikinci]; c[ikinci] =
gecici; }

}
VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 20
BLM 2.2
JAVA PROGRAMLAMA II

NESNEYE YNELK PROGRAMLAMA
(OBJECT ORIENTED PROGRAMMING)

JAVA'da SINIFLAR

rnek 1 : Bir Yolcu sinifi, yolcu1 nesnesi
oluturulmasi ve kullanilmasi.

class Yolcu {

String ad;
String soyad;
int yasi;

Yolcu() { };

Yolcu(String ad, String soyad)
{
this.ad = ad; this.soyad = soyad;
}

public void yazdir()
{
System.out.println("Ad : "+ad);
System.out.println("Soyad : "+soyad);
}

}

class Ornek_Class {
public static void main(String args[])
{
Yolcu yolcu1 = new Yolcu("Ali","Yilmaz");
yolcu1.yazdir();
}
}





VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 21


TEMEL BLG ve TERMNOLO3

Snf (Class) : Soyut bir veri tipinin hem verilen tiplerdeki veriler kmesini,
hcm dc bu dcgcrIcr zcrindc yapiIabiIccck iIcmIcr kmcsini bir araya gctirir.
rnck : "YoIcu" siniIi.

Nesne (Object) : SiniI tipindcki dcgikcnIcrc ncsnc adi vcriIir.
rnek : "yolcu1" nesnesi.

Metot (Method) : Bir cyIcmi vcya iIcmi gcrckIctircn siniI ycsidir.
"YoIcu()" yapici mctotIari vc "yazdir()" mctodu "YoIcu" siniIinin mctotIaridir.

Snf yeleri (Class Members) : SiniIin cIcmanIarina yc adi vcriIir.
DcgikcnIcr, mctotIar ...
rnckIcr : "ad", "soyad", "yasi" dcgikcnIcri; "YoIcu()" yapici mctotIari vc
"yazdir()" mctodu "YoIcu" siniIinin ycIcridir.

Yapc metot (Constructor) : SiniItan ycni bir ncsnc yaratiIdigi anda agriIan
metoda yapici mctot adi vcriIir. Yapici mctot ismi, siniI ismi iIc aynidir.

Yolcu yolcu1 = new Yolcu("Ali","Yilmaz");
"yoIcu1" ncsncsi "ncw" dcyimi iIc oIuturuIurkcn "YoIcu" siniIinin iki tanc
"String" paramctrc aIan yapici mctodu dcvrcyc gircr.

// Yapici metot
Yolcu(String ad, String soyad)
{
this.ad = ad; this.soyad = soyad;
}












VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 22
JAVA'DA VEKTRLER

JAVA RNEK 1 : Bir vcktr oIuturarak sirayIa "AIi", "CcmiI", "KcmaI" isimIcrini
ckIcyiniz. Vcktr iki ckiIdc doIaarak (Ior, cnum) isimIcri ckrana listeleyiniz.

import java.util.*;

class Vektor1
{
public static void main(String args[])
{
final Vector v = new Vector(1);

v.addElement("Ali");
v.addElement("Cemil");
v.addElement("Kemal");

for(int i=0; i<v.size(); ++i)
System.out.println(v.elementAt(i));

Enumeration enum = v.elements();
while(enum.hasMoreElements())
System.out.println(enum.nextElement());

}

}



JAVA RNEK 2 : Bir YoIcu (ad, yas) siniIi oIuturunuz. YoIcu siniIindan
yararIanarak oIuturdugunuz iki yoIcuyu bir vcktrc ycrIctiriniz. "Ior" dngs iIc
tcrstcn doIainiz.

import java.util.*;

class Yolcu
{
String ad;
int yas;

public Yolcu(String ad, int yas)
{
this.ad = ad;
this.yas = yas;
}
}

VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 23
class Vektor2
{
public static void main(String args[])
{
final Vector v = new Vector(1);

Yolcu y1 = new Yolcu("Ali",25);
v.addElement(y1);
Yolcu y2 = new Yolcu("Zekiye",15);
v.addElement(y2);

for(int i=0; i<v.size(); ++i)
{
Yolcu y = (Yolcu)v.elementAt(i);
System.out.println(y.ad+" "+y.yas);
}

}

}



ALI$TIRMALAR

1) rnck 2'yi, vcktrc ismc grc siraIi oIarak cIcman ckIcyccck ckiIdc dcgitiriniz.
2) rnck 2'yi, vcktrc yasa grc siraIi oIarak cIcman ckIcyccck ckiIdc dcgitiriniz.
3) rnek 2'de, ismi verilen bir yolcuyu silen metodu ekleyiniz.
4) rnck 2'dc, yai vcriIcn bir yoIcuyu siIcn mctodu ckIcyiniz.
5) rnek 2'de bir yolcunun bilgisini gnleyen metodu ekleyiniz.

















VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 24
JAVA RNEK 3 (vektor.java) : Vektrler

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class vektor extends JFrame
{
int yer = -1;

public vektor()
{
super("Vektor Ornek");
Container c = getContentPane();
c.setLayout(new FlowLayout());

final Vector v = new Vector(1);

final JTextField tf = new JTextField(10);
c.add(tf);

final JButton sonraki = new JButton("sonraki");
sonraki.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{//tf.setText((v.firstElement()).toString());
if (yer<(v.size()-1)) ++yer; else yer = 0;
tf.setText((v.elementAt(yer)).toString());
}
}
);
c.add(sonraki);

Double d = new Double(3.3);
Integer i = new Integer(5);
v.addElement(i);
v.addElement(d);
v.addElement("3. eleman");
setSize(200,150);
show();
}
VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 25
public static void main ( String args[] )
{
vektor app = new vektor();

app.addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
}



ekil 1 : Vektr programinin penceresi



















VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 26
JAVA RNEK 4 (telefon.java) : GUI Components







import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class telefon extends JFrame implements
ActionListener
{
public Container c;
private String names[] = { "1", "2", "3", "4", "5",
"6", "7", "8", "9" };
private JButton b[];
private GridLayout grid1;
private JTextField tf1;

public telefon()
{
super("telefon");

grid1 = new GridLayout(3,4);

c = getContentPane();
c.setLayout(new BorderLayout());

b = new JButton[names.length];

JPanel p1 = new JPanel();
for(int i=0; i<names.length; ++i) {
b[i] = new JButton(names[i]);
b[i].addActionListener(this);
p1.add(b[i]); }
tf1 = new JTextField();

c.add(p1,BorderLayout.CENTER);
c.add(tf1,BorderLayout.NORTH);
setSize(150,150);
show();
}

VERI YAPILARI (Gz 2002-2003) Blm 2 : Java Programlama
Y. Do. Dr. Aybars UGUR 27
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b[0])
tf1.setText(tf1.getText()+"1");
else
if(e.getSource()==b[1])
tf1.setText(tf1.getText()+"2");
else
if(e.getSource()==b[2])
tf1.setText(tf1.getText()+"3");
}

public static void main(String args[])
{
telefon app = new telefon();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
}

VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 28
BLM 3
ZYNELEME (RECURSION)

3.1 Giriy

Kcndini dogrudan vcya doIayIi oIarak agiran IonksiyonIara zyincIi (rccursivc)
IonksiyonIar adi vcriIir. zyincIcmc (rccursion), itcrasyonun (dngIcr, tckrar)
ycrinc gccbiIccck ok gI bir programIama tcknigidir. OrijinaI probIcmin
kk paraIarini zmck iin, bir aIt programin kcndi kcndini agirmasini
sagIayarak, tckrarIi iIcmIcrin zmnc IarkIi bir baki aisi gctirir. Ycni
baIayan programciIara, bir Ionksiyon iindc atama dcyiminin saginda
Ionksiyon isminin kuIIaniImamasi gcrcktigi syIcnmckIc birIiktc, zyincIi
programIamada Ionksiyon ismi dogrudan vcya doIayIi oIarak Ionksiyon iindc
kuIIaniIir.


3.2 rnekler

3.2.1 Faktryel Fonksiyonu

FaktrycI Ionksiyonunun matcmatik vc istatistik aIaninda ncmi byktr.
Verilen pozitif bir n tamsayisi iin n IaktrycI, n! SckIindc gstcriIir vc n iIc 1
arasindaki tm tamsayiIarin arpimina cittir.

rnekler :
0! = 1
1! = 1
5! = 5 * 4 * 3 * 2 * 1 = 120

FaktrycI Ionksiyonunun tanimi (dcIinition oI IactoriaI Iunction) :
n! = 1 if n==0
n! = n * (n-1) * (n-2) * ... * 1 if n>0

n tamsayisini aIip n IaktrycIin dcgcrini dndrcn bir aIgoritmayi u ckiIdc
oIuturabiIiriz :









prod = 1;
for(x=n; x>0; x--)
prod *= x;
return prod;
VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 29
ByIc bir aIgoritma tckrarIi (itcrativc) bir aIgoritmadir. nk, bcIirIi bir art
gcrckIcinccyc kadar srcn bcIirgin bir dng vcya tckrar vardir.

FaktrycI Ionksiyonunun digcr bir tanimi :
n! = 1 if n==0
n! = n * (n-1)! if n>0

Bu, IaktrycI Ionksiyonunun kcndi tcrimIcri cinsindcn tanimIanmasidir. ByIc
bir tanimIama, bir ncsncyi kcndi cinsindcn daha basit olarak ifade etmesinden
doIayi zyincIi tanimIama oIarak adIandiriIir.

rnek :
3! = 3 * 2! = 3 * 2 * 1! = 3 * 2 * 1 * 0!
= 3 * 2 * 1 * 1
= 3 * 2 * 1
= 3 * 2
= 6


/* n! dcgcrini hcsapIayan C Ionksiyonu */















Bu fonksiyonlar digcr bir Ionksiyondan printI(d, Iact(3)); ckIindc
agriIabiIir.










Recursive
int fact(int n)
{
int x,y;
if (n==0) return(1);
x = n-1;
y Iact(x); /*Kcndini agiriyor*/
return (n*y);
}
Iterative
int fact(int n)
{
int x, prod;
prod = 1;
for(x=n; x>0; x--)
prod *= x;
return (prod);
}

n=3
int fact(int n)
{
int x,y;
if (n==0) return(1);
x = n-1;
y = fact(x);
return (n*y);
}
n=2
int fact(int n)
{
int x,y;
if (n==0) return(1);
x = n-1;
y = fact(x);
return (n*y);
}
n=1
int fact(int n)
{
int x,y;
if (n==0) return(1);
x = n-1;
y = fact(x);
return (n*y);
}
n=0
int fact(int n)
{
int x,y;
if (n==0) return(1);
x = n-1;
y = fact(x);
return (n*y);
}
y=fact(2) y=fact(1) y=fact(0)
Base (Simplest) Case
VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 30


Bellek Grnm :

Fonksiyon zyincIi oIarak hcr agriIiinda ycrcI
dcgikcnIcr vc paramctrcIcr iin bcIIcktcn ycr ayriIir.
Hcr Ionksiyondan ikita isc iIgiIi Ionksiyonun (cn son
agriIan) dcgikcnIcri iin bcIIcktcn ayriIan ycrIcr
scrbcst birakiIir vc bir nccki kopya ycnidcn
ctkinIctiriIir. C bu iIcmi yigit (stack) kuIIanarak
gcrckIctirir. Hcr Ionksiyon agriIiinda Ionksiyonun
dcgikcnIcri yigitin cn stnc konuIur. Fonksiyondan
ikiIdiginda isc cn son ckIcncn cIcman ikariIir.
Hcrhangi bir anda IonksiyonIarin bcIIcktc buIunan
kopyaIarini paramctrc dcgcrIcri iIc birIiktc grmck iin
Debug - CaII Stack sccncgi kuIIaniIir (BorIandC 3.0).


zyincIi Ionksiyonun hcr agriIiinda bcIIcktc x vc y dcgikcnIcri iin ycr
ayriImasi istcnmiyorsa Ionksiyon kisaItiIabiIir :

int fact(int n)
{
return ( (n==0) ? 1 : n * fact(n-1) );
}


Hata durumIari da kontroI cdiImcIidir. Iact(-1) gibi bir fonksiyon agriminda n
azaIdika azaIacaktir vc programin sonIandirma kouIu oIan n 0 durumu
oIumayacaktir. Bir Ionksiyon kcndisini sonsuza kadar agirmamaIidir. Bunu
cngcIIcmck iin Ionksiyon biraz dcgitiriIcbiIir :

int fact(int n)
{
if(n<0)
{ printf(%s, Faktryel fonksiyonunda negatif parametre!); exit(1); };
return ( (n==0) ? 1 : n * fact(n-1) );
}






x
y fact(3)

x
y fact(2)

x
y fact(1)

x
y fact(0)

VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 31
3.2.2 Fibonacci Dizisi (Fibonacci Sequence)

Fibonacci dizisi, hcr cIcmani kcndindcn nccki iki cIcmanin topIami ckIindc
ifade edilen dizidir :

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

0. eleman : 0
1. eleman : 1
2. eleman : 0+1 = 1
3. eleman : 1+1 = 2
4. eleman : 1+2 = 3
5. eleman : 2+3 = 5
................................

Fibonacci dizisinin tanimi :

fib(n) = n if n==0 or n==1
fib(n) = fib(n-2) + fib(n-1) if(n>=2)


rnek hesaplama :

fib(4) = fib(2) + fib(3)
= fib(0) + fib(1) + fib(1) + fib(2)
= 0 + 1 + 1 + fib(0) + fib(1)
= 2 + 0 + 1
= 3


Fibonacci dizisinin n. cIcmaninin dcgcrini buIan C Ionksiyonu :














int fib(int n)
{
int x, y;
if(n<=1) return(n);
x=fib(n-1);
y=fib(n-2);
return(x+y);
}
n x y return
3 fib(2)
2 fib(1)
1 return(1)->2
2 1 fib(0)
1 return(0)->2
2 1 0 return(1)->3
3 1 fib(1)
1 return(1)->3
3 2 1 return(3)->
VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 32
3.2.3 kili Arama (Binary Search)

zyincIcmc sadccc matcmatikscI IonksiyonIarin tanimIamasinda kuIIaniIan
baariIi bir ara dcgiIdir. Arama gibi hcsapIama ctkinIikIcrindc dc oIduka
kuIIaniIidir. BcIirIi bir sayidaki cIcman icrisindc bcIIi bir cIcmani buImaya
aIima iIcminc arama adi vcriIir. EIcmanIarin siraIanmasi arama iIcmini
koIayIatirir. IkiIi arama da siraIanmi cIcmanIar zcrindc gcrckIctiriIir. Bir
dizinin iki paraya bInmcsi vc uygun parada ayni iIcmin srdrImcsi iIc
yapiIan arama iIcmidir. TcIcIon rchbcrinin ortasini aip, soyadina grc ncc isc
iIk yarida, sonra isc ikinci yarida ayni iIcmi tckrarIama yoIu iIc arama, tcIcIon
rchbcrindcki batan itibarcn sona dogru sira iIc hcrkcsc bakmaktan ok daha
etkindir.

int binsrch(int a[], int x, int low, int high)
{
int mid;
if(low>high)
return(-1);
mid=(low+high)/2;
return(x==a[mid] ? mid : x<a[mid] ? binsrch(a,x,low,mid-1) : binsrch(a,x,mid+1,high) );
}

int i; int a[8] = { 1,3,4,5,17,18,31,33 }; // a dizisi : 1 3 4 5 17 18 31 33
i = binsrch(a,17,0,7); // 0 ve 7. cIcmanIar arasinda 17 sayisinin aratiImasini
sagIar.


binsrch(a,17,0,7);
mid = (0+7)/2 = 3. eleman
a[mid] = 5 => 17>5

binsrch(a,17,4,7);
mid = (4+7)/2 = 5.eleman
a[mid] = 18 => 17<18

binsrch(a,17,4,4);
mid = (4+4)/2 = 4. eleman
a[mid] = 17 => 17==17
return(17); // Bulundu
a vc x gIobaI dcgikcn oIarak tanimIanirsa Ionksiyon vc agrimi u ckiIdc
oIacaktir :


VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 33
int binsrch(int low, int high)
{
int mid;
if(low>high)
return(-1);
mid=(low+high)/2;
return(x==a[mid] ? mid : x<a[mid]?binsrch(low,mid-1):binsrch(mid+1,high) );
}
... i = binsrch(0,n-1);



3.2.4 Hanoi Kuleleri Problemi (Towers of Hanoi Problem)

kuIc (A,B,C) oIan bir sistcmdc yariapi birbirindcn IarkIi 4 tanc diskin A
kuIcsinc ycrIctiriIdigini dnn (SckiI 3.1).
Kurallar :
Bir diskin aItinda yariapi daha kk bir disk buIunamaz. Bir diskin zcrinc
yariapi daha byk bir disk ycrIctiriIcmcz.
Bir anda bir kuIcnin sadccc cn stndcki disk digcr bir kuIcyc
ycrIctiriIcbiIir. Bir anda bir disk harckct cttiriIcbiIir.










$ekil 3.1 Hanoi KuIcsinin IIk YcrIctirimi

ProbIcmdc istcncn : B dircgindcn dc yararIanarak tm diskIcrin C`yc
ycrIctiriImcsi.









A B C
VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 34
Hanoi Towers Probleminin zm ve C Program Haline Getirilmesi:

nce n disk iin dncIim.
1 disk oIursa, dogrudan A`dan C`yc konuIabiIir (Dogrudan grIyor).
(n-1) disk cinsinden zm retebilirsek zyinelemeden yararlanarak n disk
iin de zm bulabiliriz.
4 diskli bir sistemde, kurallara gre en stteki 3 diski Bye yerIctircbiIirsck
zm koIayIair.

GcncIIctirirsck :
1. n==1 => Adan Cye diski koy ve bitir.
2. En stteki n-1 diski Adan Cden yararlanarak Bye aktar.
3. Kalan diski Adan Cye koy.
4. Kalan n-1 diski Adan yararlanarak Bden Cye koy.

Problem deyimi : Hanoi Probleminin zm
ProbIcm u an tam oIarak tanimIi dcgiI, probIcm dcyimi yctcrIi dcgiI.
Bir diskin bir kuIcdcn digcrinc tainmasini biIgisayarda nasiI tcmsiI cdcccgiz?
Programin GirdiIcri ncIcrdir? iktiIari ncIcrdir? bcIIi dcgiI.

Girdi/ikti tasarimi hcrhangi bir probIcmin zmnn programin
aIgoritmasinin oIuturuImasinda ncmIi ycr tutar. OIuturuIacak aIgoritmanin
yapisi da byk Idc girdi vc iktiIara bagIi oIacaktir. Uygun girdi vc ikti
tasarimi, aIgoritmaIarin gcIitiriImcsini koIayIatirabiIir vc ctkinIik sagIar.

Girdi :
disk sayisi : n
kuleler : A, B, C (uygun)

ikti :
disk nnn`i, yyy kuIcsindcn aIip zzz kuIcsinc ycrIctir.
nnn : disk numarasi. En kk disk 1 numara (cn kk sayi oImasi
dogrudan)
yyy vc zzz dc kuIc adi.

Ana programdan towcrs Ionksiyonunun agriImasi :
void main()
{
int n;
scanf(%d,&n);
towers(parameters);
}

VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 35

Simdi paramctrcIcri bcIirIcmc aamasina gcIindi :

#include <stdio.h>
void towers(int, char, char, char);

void main()
{
int n;
scanf(%d,&n);
towers(n,A,B,C);
}

void towers(int n, char frompeg, char topeg, char auxpeg)
{
if(n==1) {
printf("\ndscscs",n,". diski ",Irompcg," kuIcsindcn aIip ",
topcg, " kuIcsinc ycrIctir");
return;
};
towers(n-1, frompeg,auxpeg,topeg); // n-1 diskin yardimci kuIcyc konuImasi
printf("\ndscscs",n,". diski ",Irompcg," kuIcsindcn aIip ",
topcg, " kuIcsinc ycrIctir");
towers(n-1, auxpeg,topeg,frompeg); // n-1 diskin hcdcI kuIcyc konuImasi
}

Programin n3 disk iin aIitiriImasi sonucu oIuan ckran iktisi :

1. diski A kuIcsindcn aIip C kuIcsinc ycrIctir
2. diski A kuIcsindcn aIip B kuIcsinc ycrIctir
1. diski C kuIcsindcn aIip B kuIcsinc ycrIctir
3. diski A kuIcsindcn aIip C kuIcsinc ycrIctir
1. diski B kuIcsindcn aIip A kuIcsinc ycrIctir
2. diski B kuIcsindcn aIip C kuIcsinc ycrIctir
1. diski A kuIcsindcn aIip C kuIcsinc ycrIctir








VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 36

3.2.5 Tek Bagl Listede Elemanlarn Ters Srada Listelenmesinde
zyineleme




Procedure RevPrint (list:ListType)
begin
if list<>NIL
then
begin
RevPrint(List^.Next);
write(list^.info)
end;
end;

Ekran iktisi : E D C B A

EIcmanIari bir yigita koyup tcrs sirada IistcIcmck ycrinc dogrudan zyincIcmc
kuIIanmak daha basit vc dogaI.


3.3 zyineleme Zinciri

zyincIi bir Ionksiyonun kcndisini dogrudan agirmasi gcrckmcz. DoIayIi
oIarak da agirabiIir. rnck bir yapi u ckiIdcdir :
















a(parametreler)
{
......
b(dcgcrIcr);
......
}
b(parametreler)
{
......
a(dcgcrIcr);
......
}
List A B C D E

VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 37
3.4 zyineleme (Recursion) ve terasyon (Iteration)

Hcrhangi bir Ionksiyonun itcratiI (itcrativc) yani tckrarIi vcrsiyonu, zyincIi
(rccursivc) vcrsiyonundan zaman (timc) vc ycr (spacc) bakimindan gcncIdc daha
ctkindir. Bunun ncdcni, zyincIcmcdc Ionksiyonun hcr agriIiinda Ionksiyona
giri vc ikita oIuan ykIcrdir.

BununIa birIiktc gcncIdc yapisi uygun oIan probIcmIcrin zmndc
zyincIcmcnin kuIIaniImasi daha dogaI vc mantikIidir. TanimIamaIardan
zmc dogrudan uIaiIabiIir. Yigit kuIIanimi gcrcktircn durumIarda zyincIi
olmayan zmIcrin gcIitiriImcsi zordur vc hataIari gidcrmck iin daha IazIa
aba harcamak gcrckir. rnck oIarak, tck bagIi Iistcdcki cIcmanIarin tcrs sirada
yazdiriImasi vcriIcbiIir. zyincIi zmdc yigit otomatik oIarak oIumaktadir vc
ayrica yigit kuIIanmaya gerek kalmaz.

Itcrasyonda ControI Structurc oIarak dngIcr yoIu iIc tckrar kuIIaniIirkcn,
zyincIcmcdc scim yapisi kuIIaniIir. Itcrasyonda tckrar, dogrudan sagIanirkcn,
zyincIcmcdc srckIi Ionksiyon agriIari iIc sagIanir. Itcrasyon, dng durum
arti gccrsizIigindc sonIanirkcn, zyincIcmc cn basit duruma (simpIcst casc
basc casc) uIaiIdiginda sonIanir. Itcrasyonda kuIIaniIan saya dcgcri
dcgitiriIcrck probIcm zIrkcn, zyincIcmcdc orijinaI probIcmin daha basit
srmIcri oIuturuIarak zmc uIaiIir.

VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 38
-$9$'$g=<1(/(0(g51()DNW|U\HO

// Verilen bir sayinin faktryelini bulan metodu ieren rnek
import java.io.*;

class FaktoryelOrnek
{
static int sayi;

public static void main(String args[]) throws IOException
{
System.out.print("Sayi veriniz :");
System.out.flush();
sayi=getInt();
int sonuc = factorial(sayi);
System.out.println(sayi+"! ="+sonuc);
}

public static int factorial(int n)
{
if(n==0)
return 1;
else
return(n*factorial(n-1));
}



VERI YAPILARI (Gz 2002-2003) Blm 3 : zyineleme
Y. Do. Dr. Aybars UGUR 39
public static String getString() throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
return s;
}

public static int getInt() throws IOException
{
String s = getString();
return Integer.parseInt(s);
}

}
VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 40
BLM 4
AGALAR (TREES)

4.1 Giriy

BagIi IistcIcr, yigitIar vc kuyrukIar dogrusaI (Iincar) vcri yapiIaridir. AgaIar isc
dogrusaI oImayan bcIirIi nitcIikIcrc sahip iki boyutIu vcri yapiIaridir (SckiI 4.1).
AgaIardaki dgmIcrdcn iki vcya daha IazIa bag ikabiIir. IkiIi agaIar (binary
trccs), dgmIcrindc cn IazIa iki bag icrcn (0,1 vcya 2) agaIardir. Agacin cn
sttcki dgmnc kk (root) adi vcriIir.
















$ekil 4.1 : Bir ikiIi agacin graIikscI gstcrimIcri

SckiI 4.1'dc grIcn agacin dgmIcrindcki biIgiIcr sayiIardan oIusmustur. Hcr
dgmdcki soI vc sag bagIar yardimi iIc digcr dgmIcrc uIasiIir. SoI (IcItptr) vc
sag (rightptr) bagIar bos ("NULL" - "/" = "\") da oIabiIir. Dgm yapiIari
dcgisik trIcrdc biIgiIcr icrcn vcya birdcn IazIa biIgi icrcn agaIar da oIabiIir.
Dogadaki agaIar kkIcrindcn gcIisip ggc dogru ykscIirkcn vcri yapiIarindaki
agaIar kk yukarida yaprakIari asagida oIacak sckiIde izilirler.

SckiI 4.2'dcki aga, A dgm kk oImak zcrc 9 dgmdcn oIusmaktadir. SoI
aIt aga B kk iIc basIamakta vc sag aIt aga da C kk iIc basIamaktadir.
A'dan soIda B'yc gidcn vc sagda C'yc gidcn iki daI (branch) ikmaktadir.









5
7 8
9
5
7 8
9
VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 41














$ekil 4.2 : AgaIarda dzcyIcr


4.2 Tanmlar (rnckIcr SckiI 4.2'yc grc vcriImistir) :

1) kili Aga (Binary Tree) : SonIu dgmIcr kmcsidir. Bu kmc bos bir
kmc oIabiIir (cmpty trcc). Bos dcgiIsc su kuraIIara uyar.
i) Kk oIarak adIandiriIan zcI bir dgm vardir.
ii) Hcr dgm cn IazIa iki dgmc bagIidir.
iii) Kk hari hcr dgm bir daIdan gcImcktcdir.
iv) Tm dgmIcrdcn yukari dogru ikiIdika sonuta kkc uIasiIir.

2) Dgm (node) : Agacin hcr bir cIcmanina dgm adi vcriIir.
rnekler : A, B, C.

3) Kk (root) : Dzcy 0'daki (scmanin cn stndcki) tck dgm.
rnck : SckiI 4.2'dc A biIgisini icrcn dgm.

4) ocuk (child) : Bir dgmn soI vc sag bagi araciIigi iIc bagIandigi
dgmIcr o dgmn ocukIaridir. rnck : B vc C, A'nin ocukIaridir.

5) Parent : Bir dgm, sag vc soI bagIari iIc bagIandigi dgmIcrin parcnt'idir.
A dgm, B vc C dgmIcrinin parcnt'idir.

6) Bir dgmn dzey (level) veya derinligi (depth) : Bir dgmn kk
dgmdcn oIan uzakIigidir. rnck : D dgmnn dzcyi vcya dcrinIigi
2dir.

7) Agacn derinligi (depth of tree) : En dcrindcki yapragin dcrinIigi vcya
yksckIigi (hcight). rnck : SckiI 4.2'dcki agacin dcrinIigi 3'tr.

A
B C
D
G
E F
H I
Dzey 0 Dzey 0
Dzey 1
Dzey 2
Dzey 3
VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 42
8) Yaprak (leaf) : SoI vc sag bagi bos oIan dgmIcrc yaprak adi vcriIir.
rnekler : D,G,H,I.

9) Kardey (sibling, brother) : Ayni parcnt'a sahip iki dgmc kardcs dgmIcr
adi vcriIir. rnckIcr : B iIc C kardcstir. D iIc E kardcstir. H iIc I kardcstir.

10) Ancestor (st dgm) : Bir dgmn parcnt'i birinci anccstor'idir.
Parcnt'in parcnt'i (rccursion) ikinci anccstor'idir. Kk, kendi hari tm
dgmIcrin anccstor'idir.

11) Descendant (alt dgm) : Bir dgmn iki ocugu birinci
dcsccndant'Iaridir. OnIarin ocukIari da ikinci dcsccndant'Iaridir.

12) Full binary tree : i) Hcr yapragi ayni dcrinIiktc oIan ii) Yaprak oImayan
dgmIcrin tmnn iki ocugu oIan aga FuII (StrictIy) Binary Trcc'dir
(Ikinci sart yctcrIi). Bir IuII binary trcc'dc n tanc yaprak varsa bu agata
toplam 2n-1 dgm vardir.

13) Complete binary tree : FuII binary trcc'dc ycni bir dcrinIigc soIdan saga
dogru dgmIcr ckIcndigindc oIusan agaIara CompIctc Binary Trcc dcniIir.
ByIc bir agata bazi yaprakIar digcrIcrindcn daha dcrindir. Bu ncdcnIc IuII
binary trcc oImayabiIirIcr. En dcrin dzcydc dgmIcr oIabiIdigincc soIdadir.

14) General Tree (Aga) : Hcr dgmn cn IazIa iki ocugu oIabiImc siniri
oImayan agaIardir.

15) kili Arama Agac (Binary Search Tree) : Bos oIan vcya hcr dgm
asagidaki sartIara uyan anahtara sahip bir ikiIi agatir :

i) Kkn soIundaki aIt agaIardaki (cgcr varsa) tm anahtarIar kktcki
anahtardan kktr.
ii) Kkn sagindaki aIt agaIardaki (cgcr varsa) tm anahtarIar kktcki
anahtardan byktr.
iii) SoI vc sag aIt agaIar da ikiIi arama agaIaridir.










VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 43
4.3 kili Agalar ve kili Agalar zerindeki Dolayma ylemleri

DoIasma (travcrsc), aga zcrindcki tm dgmIcrc ugrayarak gcrckIcstiriIir.
AgaIar zcrindcki doIasma isIcmIcri, agataki tm biIgiIcrin IistcIcnmcsi vcya
baska amaIarIa yapiIir. DogrusaI vcri yapiIarinda bastan sona dogru doIasmak
koIaydir. AgaIar isc dgmIcri dogrusaI oImayan vcri yapiIaridir. Bu ncdcnIc
IarkIi aIgoritmaIar uyguIanir. ok biIincn yntcmIcr tanc oIup zyincIcmcdcn
yararIanirIar :

1) Preorder (depth-first order) Dolayma (Traversal)
i) Kkc ugra (visit)
ii) SoI aIt agaci prcordcr oIarak doIas.
iii) Sag aIt agaci prcordcr oIarak doIas.

2) Inorder (Symmetric order) Dolayma
i) SoI aIt agaci inordcr'a grc doIas
ii) Kkc ugra (visit)
iii) Sag aIt agaci inordcr'a grc doIas.

3) Postorder Dolayma
i) SoI aIt agaci postordcr'a grc doIas
ii) Sag aIt agaci postordcr'a grc doIas.
iii) Kkc ugra (visit)




















$ekil 4.3 : IkiIi Aga vc dcgisik sckiIIcrdc doIasiImasi


A
B C
D
G
F
H I
E
PreOrder : ABDGCEHIF
InOrder : DGBAHEICF
PostOrder : GDBHIEFCA
VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 44
4.4 kili Arama Agalar

IkiIi arama agaIari, hcr bir dgmn soIundaki (soI aIt agacindaki) tm
dgmIcr kcndisindcn kk, sagindakiIcr (sag aIt agacindakiIcr) dc
kendisinden byk oIacak sckiIdc oIusturuIurIar (SckiI 4.4). IkiIi arama
agaIarindaki cn ncmIi isIcmIcrdcn birisi aramadir.

rnck oIarak asagidaki agata, 44 sayisini aratmak iin su isIcm sirasi izIcnir :
KarsiIastirma 1 : 44, 47 iIc karsiIastiriIir.
4447 oIdugundan soI bagdan iIcrIcnir.
KarsiIastirma 2 : 44, 25 iIc karsiIastiriIir.
4425 oIdugundan sag bagdan iIcrIcnir.
KarsiIastirma 3 : 44, 43 iIc karsiIastiriIir.
4443 oIdugundan sag bagdan iIcrIcnir.
KarsiIastirma 4 : 44 == 44.
Aranan anahtar dcgcri agata bulundu!

rnck oIarak asagidaki agata, 90 sayisini aratmak iin su isIcm sirasi izIcnir :
KarsiIastirma 1 : 90, 47 iIc karsiIastiriIir.
9047 oIdugundan sag bagdan iIcrIcnir.
KarsiIastirma 2 : 90, 77 iIc karsiIastiriIir.
9077 oIdugundan sag bagdan ilerlenir.
KarsiIastirma 3 : 90, 93 iIc karsiIastiriIir.
9093 oIdugundan soI bagdan iIcrIcnir.
: NULL.
Aranan anahtar dcgcri agata buIunamadi.













$ekil 4.4 : IkiIi Arama Agaci





47



25 77



11 43 65 93



7 17 31 44 68
VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 45
GrIdg gibi arama isIcminin ctkinIigi agacin yksckIiginc bagIidir. IkiIi
arama agaIari dcngcIi tutuIabiIirsc, bir anahtar dcgcrini aramada oIduka
hizIidirIar. ByIc oIdugunda n cIcmanIi bir aga cn IazIa Iog
2
n dzcydcn oIusur.
Bir dcgcrin buIunmasi vcya agata oImadiginin bcIirIcnmcsi iin cn IazIa Iog
2
n
karsiIastirma yapiIir. rnck oIarak 1000 cIcmanIi bir ikiIi arama agacinda bir
cIcmanin buIunabiImcsi iin cn IazIa 10 karsiIastirma yapmak gcrckcccktir
(2
10
-1024 1000). BagIi IistcIcrdc isc buIunacak cIcmanin dcgcrinc grc
(cIcman sonda isc) 1000 karsiIastirma yapmak gcrckcbiIir.

Dgm sayisi n oIan CompIctc Binary Trcc'dc dcrinIigi hcsapIayabiIiriz.
n = 2
0
+ 2
1
+ 2
2
+... + 2
d
= 2
d+1
-1 => n+1 = 2
d+1
=> d = log
2
(n+1) - 1dir.
15 dgmI bir agata d - Iog
2
(15+1) - 1 = 4-1 = 3'tr.

IkiIi agaIardaki doIasma isIcmIcrinin tm ikiIi arama agaIarinda da kuIIaniIir.
IkiIi arama agaIari zcrindc inordcr doIasiIdiginda tm cIcmanIar kktcn
bygc siraIi bir sckiIdc karsimiza gcIcccktir.

IkiIi arama agaIarinin oIusturuImasi isc su sckiIdcdir : Hcrhangi siraIi oImayan bir sayi dizisi
gcIirkcn hcr bir cIcman agaca bir yaprak dgm oIarak ckIcnir. rnck oIarak sira iIc, 47, 25,
43, 77, 65, 68, 93, 11, 17, 44, 31, 7 sayiIari agaca ckIcnmck istcnirsc:
47 : 47 kke eklenir.
25 : 25<47, 47'nin soluna eklenir.
43 : 4347, 4325, 25'in sagina ckIcnir.
77 : 7747, 47'nin sagina ckIcnir.
65 : 6547, 6577, 77'nin soI bagina ckIcnir. (Agaci tamamIayiniz...).

.....
.....

IkiIi arama agaIari, tckrarIari nIcmck aisindan da oIduka yararIidirIar. Aga
oIusturuIurkcn tckrar cdcn bir cIcman ckIcnmck istcndigindc, kktcn itibarcn
soIa git, saga git kararIari iIc o dcgcrin oIdugu ycrc hizIica uIasiIacak vc agata
(vcriIcr iindc) o dcgcrin zatcn oIdugu anIasiIacaktir. Bu sckiIdc tckrar cdcn
vcriIcrin oImasi cngcIIcnir.

BunIar disinda ikiIi arama agacindan dgm siImc, ikiIi arama agacini iki
boyutIu aga biimindc ckrana izdirmc, agaci dzcy sirasinda doIasma (dzcy
dzcy soIdan saga) gibi aIgoritmaIar da yaziIabiIir. Ayrica aga dzcyini buIma,
agaca string dc dahiI birok biIgi ckIcmc gibi isIcmIcr dc yapiIabiIir.




VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 46
4.5 kili Arama Agac Oluyturmay ve Dolaymay Saglayan 3ava Program

// Dgm Sinifi
class TreeNode
{
public int data;
public TreeNode leftChild;
public TreeNode rightChild;

public void displayNode()
{ System.out.print(" "+data+" "); }
}

// Aga Sinifi
class Tree
{
private TreeNode root;

public Tree()
{ root = null; }

public TreeNode getRoot()
{ return root; }

// Agacin preOrder Dolailmasi
public void preOrder(TreeNode localRoot)
{
if(localRoot!=null)
{
localRoot.displayNode();
preOrder(localRoot.leftChild);
preOrder(localRoot.rightChild);
}
}

// Agacin inOrder Dolailmasi
public void inOrder(TreeNode localRoot)
{
if(localRoot!=null)
{
inOrder(localRoot.leftChild);
localRoot.displayNode();
inOrder(localRoot.rightChild);
}
}

VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 47
// Agacin postOrder Dolailmasi
public void postOrder(TreeNode localRoot)
{
if(localRoot!=null)
{
postOrder(localRoot.leftChild);
postOrder(localRoot.rightChild);
localRoot.displayNode();
}
}

// Agaca bir dgm eklemeyi saglayan metot
public void insert(int newdata)
{
TreeNode newNode = new TreeNode();
newNode.data = newdata;
if(root==null)
root = newNode;
else
{
TreeNode current = root;
TreeNode parent;
while(true)
{
parent = current;
if(newdata<current.data)
{
current = current.leftChild;
if(current==null)
{
parent.leftChild=newNode;
return;
}
} else
{
current = current.rightChild;
if(current==null)
{
parent.rightChild=newNode;
return;
}
}
} // end while
} // end else not root
} // end insert()

} // class Tree
VERI YAPILARI (Gz 2002-2003) BIm 4 : AGALAR
Y. Do. Dr. Aybars UGUR 48

// BinTree Test sinifi
class BinTree
{
public static void main(String args[])
{
Tree theTree = new Tree();

// Agaca 10 tane sayi yerletirilmesi
System.out.println("Sayilar : ");
for (int i=0;i<10;++i) {
int sayi = (int) (Math.random()*100);
System.out.print(sayi+" ");
theTree.insert(sayi);
};

System.out.print("\nAgacin InOrder Dolailmasi : ");
theTree.inOrder(theTree.getRoot());
System.out.print("\nAgacin PreOrder Dolailmasi : ");
theTree.preOrder(theTree.getRoot());
System.out.print("\nAgacin PostOrder Dolailmasi : ");
theTree.postOrder(theTree.getRoot());
}
}



VERI YAPILARI (Gz 2002-2003) BIm 5 : YIGIT
Y. Do. Dr. Aybars UGUR 49
BLM 5
YIGIT (STACK)


5.1 Giriy

EIcman ckIcmc ikarmaIarin cn sttcn (top) yapiIdigi vcri yapisina yigit (stack)
adi vcriIir. Bir cIcman ckIcncccgindc yigitin cn stnc konuIur. Bir eleman
ikariIacagi zaman yigitin cn stndcki cIcman ikariIir. Bu cIcman da yigittaki
cIcmanIar iindcki cn son ckIcncn cIcmandir. Bu ncdcnIc yigitIara LIFO (Last In
First Out : Son gircn iIk ikar) Iistcsi dc dcniIir.


5.2 Ygt ylemleri ve Tanmlar

(Tanim) Boy ygt (empty stack) : EIcmani oImayan yigit.

push (yigita cIcman ckIcmc) : push(s,i), s yigitinin cn stnc i dcgcrini
eleman olarak ekler.
pop (yigittan cIcman ikarma) : i - pop(s), s yigitinin cn stndcki cIcmani
ikartir vc dcgcrini i dcgiskcninc atar.
empty (yigitin bos oIup oImadigini bcIirIcycn isIcm) : cmpty(s), yigit bos isc
TRUE dcgcrini, dcgiIsc FALSE dcgcrini dndrr.
stacktop (yigittan ikariImaksizin cn sttcki cIcmanin dcgcrini dndrcn isIcm)
Dcnk isIcm : (pcck)
i = pop(s);
push(s,i);
(Tanim) Underflow : Bos yigit zcrindcn cIcman ikariImaya vcya yigitin cn
stndcki cIcmanin dcgcri bcIirIcnmcyc aIisiIdiginda oIusan gccrsiz durum.
(zm : pop(s) vcya stacktop(s) yapiImadan, cmpty(s) kontroI yapiIarak, bos
bir yigit oIup oImadigi bcIirIcnir. Bos isc bu isIcmIcrin yapiImasi cngcIIcnir.)


5.3 Ygt Kullanm (rnek)

Bir yigit vc zcrindcki isIcmIcrin tanimIandigini dsncIim. I ic parantczIcr
icrcn bir iIadcdc parantczIcrin gccrIi oImasi iin :
1. AiIan vc kapanan topIam parantcz sayisi csit oImaIidir. A ( vc kapa )
parantczIcrin csitIiginc bakiIir.
2. Kapanan hcr parantczdcn ncc bir parantcz aiImis oImaIidir. Hcr ) iin bir
( oIup oImadigina bakiIir.
((AB) vc AB( 1. sarta uymaz.
)A+B(-C ve (A+B))-(CD 2. sarta uymaz.
VERI YAPILARI (Gz 2002-2003) BIm 5 : YIGIT
Y. Do. Dr. Aybars UGUR 50

ProbIcmin zm iin hcr aiIan parantczdc bir gccrIiIik aIani aiIir vc
kapanan parantczdc dc kapanir. IIadcnin hcrhangi bir noktasindaki Ncsting
Dcpth (parantcz dcrinIigi) o ana kadar aiImis Iakat kapanmamis parantczIerin
sayisidir. IIadcnin hcrhangi bir noktasindaki parantcz sayisi - ( sayisi )
sayisi oIarak bcIirtiIcbiIir. ParantczIcri gccrIi bir iIadcdc su sartIar oImaIidir.

1. IIadcnin sonunda parantcz sayisi 0 oImaIidir. IIadcdc ya hi parantcz yoktur
veya aiIan parantczIcrin sayisi iIc kapanan parantczIcrin sayisi csittir.
2. IIadcnin hibir noktasinda parantcz sayisi ncgatiI oImamaIidir. Bu, parantcz
aiImadan bir parantczin kapanmadigini garantiIcr.

Asagidaki ifade iki sarta da uyar :
7-((x*((x+y)/(j-3))+y)/(4-2.5))
00122234444334444322211222 2 10

Asagidaki ifade 1. sarta uymaz :
((A+B)
122221 (Ifade sonunda 1 parantez artti. 0 degil)

Asagidaki ifade 2. sarta uymaz :
( A + B ) ) - ( C + D
1 1 1 1 0-1-1 0 0 0 0 (Arada negatif oldu)

Problem biraz degistiriIdigindc :
parantezler (parentheses) : (, )
kscIi parantczIcr (brackcts) : |, |
kme parantezleri (braces) : {, }
icrcbiIcn iIadcIcrin parantcz dogruIugu kontroInn yapiImasi istcndigindc
parantcz sayiIarinin yaninda tipIcrinin dc tutuImasi gcrckcccktir. Bu ncdcnIc
yukaridaki yntcmin kuIIaniImasi uygun oImaz.

void main() { printf(Merhaba}; );
yanlis bir ifadedir.

KarsiIasiIan parantczIcri tutmak zcrc yigit kuIIaniIabiIir (SckiI 5.1). Bir
parantczIc karsiIasiIdiginda yigita ckIcnir. IIgiIi parantczIcrin karsiIigi iIc
karsiIasiIdiginda isc yigita bakiIir. Yigit bos dcgiIsc yigittan bir cIcman
ikariIarak dogru karsiIik oIup oImadigi kontroI cdiIir. Dogruysa isIcm
srdrIr. DcgiIsc iIadc gccrsizdir. Yigit sonuna uIasiIdiginda yigit bos
oImaIidir. Aksi haIdc aiImis ama kapanmamis parantcz oIabiIir.


VERI YAPILARI (Gz 2002-2003) BIm 5 : YIGIT
Y. Do. Dr. Aybars UGUR 51
{x+(y-[a+b])*c-[(d+e)]}/(h-(j-(k-[l-n]))).
e e e ee e e e e







$ekil 5.1 : IIadcIcrin parantcz gccrIiIiginin bcIirIcnmcsindc kuIIaniIan yigit


5.4 Ygt Soyut Veri Tipi (Stack ADT) (Bu gstcrim sckIi sinava dahiI dcgiI-
optional)

Yigit ADT`nin gstcrimi (cItypc yigitin cIcmanIarinin vcri tipi oImak zcrc) :

abstract typedef <<eltype>> STACK (eltype);

abstract empty(s)
STACK(eltype) s;
postcondition empty==(len(s)==0);

abstract eltype pop(s)
STACK(eltype) s;
precondition empty(s)==FALSE;
postcondition pop=first(s);
s == sub(s, 1, len(s)-1);

abstract push(s,elt)
STACK(eltype) s;
eltype elt;
postcondition s == <elt>+s;


5.5 3ava'da Ygtlar

Yigitin dizi kuIIaniIarak gcrckIcstirimi (SckiI 5.2):







$ekil 5.2 : s yigiti zcrindc cIcman ckIcmc vc ikarma isIcmIcri.
....

6
9
5

top=2
ekle(s,7) s
....
7
6
9
5

top=3
ikar(s)
....

6
9
5

top=2





{




(
{



[
(
{




(
{





{




[
{



(
[
{




[
{






....................
.


[
(
(
(






VERI YAPILARI (Gz 2002-2003) BIm 5 : YIGIT
Y. Do. Dr. Aybars UGUR 52
top - 2`nin anIami yigitta 3 cIcman vardir vc yigitin cn stndcki cIcman |2|`dir.
Bos yigitta top - -1dir.

Javada karaktcr yigiti siniIi oIusturma vc kuIIanimina iIiskin bir rnck su
sckiIdcdir :

import java.io.*;

class StackChar
{
private int maxSize;
private char[] stackArray;
private int top;

public StackChar(int max)
{
maxSize = max;
stackArray = new char[maxSize];
top = -1;
}

public void push(char j)
{ stackArray[++top] = j; }

public char pop()
{ return stackArray[top--]; }

public boolean isEmpty()
{ return top==-1; }

}

class Reverse
{
public static void main(String args[])
{
StackChar y = new StackChar(100);
String str = "Merhaba";
for(int i=0; i<str.length(); ++i)
y.push(str.charAt(i));
while(!y.isEmpty()) System.out.println(y.pop());
}
}

VERI YAPILARI (Gz 2002-2003) BIm 5 : YIGIT
Y. Do. Dr. Aybars UGUR 53
Java'da hazir Stack (yigit) siniIi da buIunmaktadir. Asagidaki rncktc String'Icr,
oIusturuIan s yigitina ycrIcstiriIcrck tcrs sirada IistcIcnmcktcdir.

import java.util.*;

public class StackTest
{
public static void main(String args[])
{

String str[] = { "Bilgisayar", "Dolap", "Masa",
"Sandalye", "Sira" };

Stack s = new Stack();

for(int i=0; i<str.length;++i)
s.push(str[i]);

while(!s.empty()) System.out.println(s.pop());

}
}
VERI YAPILARI (Gz 2002-2003) BIm 5 : YIGIT
Y. Do. Dr. Aybars UGUR 54
5.6 INFIX, POSTFIX, PREFIX

Bu kisimda biIgisayar aIanindaki ncmIi konuIardan biri oIan inIix, postIix vc
prcIix kavramIari zcrindc duruIacak vc bu kavramIarda yigit kuIIanimi
gsterilecektir.

A+B
opcrator (isIcmci) :
opcrands (isIcncnIcr) : A, B

infix gsterim : A+B
prefix gsterim : +AB (benzeri bir gsterim add(A,B) fonksiyonu)
postfix gsterim : AB+

in, prc vc post, opcrator`n opcrand`Iara grc ycrinc karsiIik gcIir. InIix
gstcrimdc isIcmci (), isIcncnIcrin (A,B) arasinda ycr aIir. PrcIix gstcrimdc
isarcti, isIenenlerden nce gelir, postfix gsterimde de sonra gelir.

A+B*C infix ifadesini postfixe evirelim.
Bunun iin isIcm nccIiginc bakmak gcrckir. arpmanin topIamaya nccIigi
oIdugu iin, A(B*C) sckIindc dsnIcbiIir. ncc arpma kismi postIix`c
evrilecek sonra da sonucu.

A+(B*C) anIasiIirIigi artirmak iin parantcz kuIIandik.
A+(BC*) arpim evrildi.
A(BC*)+ toplam evrildi.
ABC*+ postfix form.

IsIcm nccIigi (byktcn kgc)
s alma
arpma/Blme
TopIama/ikarma

Parantczsiz vc ayni nccIigc sahip isIcmciIcrdc isIcmIcr soIdan saga dogru
yapiIir (s aIma hari). s aImada sagdan soIa dogrudur. A-B+C de ncelik (A-
B)C sckIindcdir. ABC`dc isc A(BC) sckIindcdir. ParantczIcr dcIauIt
nccIikIcri bcIirtmck iin konuImustur.

Infix Postfix Prefix
A+B-C AB+C- -+ABC
(A+B)*(C-D) AB+CD-* *+AB-CD
A^B*C-D+E/F/(G+H) AB^C*D-EF/GH+/+ +-*BCD//EF+GH
((A+B)*C-(D-E))^(F+G) AB+C*DEFG+^ ^-*+ABC-DE+FG
A-B/(C*D^E) ABCDE^*/- -A/B*C^DE
VERI YAPILARI (Gz 2002-2003) BIm 5 : YIGIT
Y. Do. Dr. Aybars UGUR 55

Dikkat edilecek olunursa, postfix ile prefix ifadeler birbirinin ayna grnts
dcgiIdir.

PostIix Iormda parantcz kuIIanimina gcrck yoktur. Iki inIix iIadcyi dsnn :
A(B*C) vc (AB)*C. IIk iIadcdc parantcz gcrcksizdir. Ikincidc iIk iIadc iIc
karistiriImamasi iin gcrckIidir. PostIix Iorma cvirmck bu karisikIigi nIcr.
(A+B)*(CD)`yi inIix Iormda parantczsiz iIadc ctmck iin arpim isIcmi
yapiIirsa isIcm sayisi ogaIir.

InIix Iormdan postIix Iorma cvriIcn bir iIadcdc opcrand`Iarin (sayi vcya
scmboI) bagIi oIdugu opcrator`Icri (,-,*,/) grmck zorIasir (3 4 5 * iIadcsinin
sonucunun 23`c, 3 4 5 * iIadcsinin sonucunun 35`c karsiIik gcIdigini buImak
zor gibi grnr). Fakat parantez kullanmadan tek anlama gelen bir hale
dnsr. IsIcmIcri, hcsapIamaIari yapmak koIayIasir.

postIix iIadcnin sonucunun hcsapIanmasi (vc bunu gcrckIcstircn aIgoritma) :

Bir postIix string`indc hcr opcrator kcndindcn ncc gcIcn iki opcrand zcrindc isIcm
yapacaktir. Bu opcrandIar daha nccki opcrator`Icrin sonuIari da oIabiIir. Bir anda iIadcdcn
bir opcrand okunarak yigita ycrIcstiriIir. Bir opcrator`c uIasiIdiginda, yigitin cn stndcki iki
cIcman bu opcrator`n opcrand`Iari oIacaktir. Iki cIcman yigittan ikariIir isIcm yapiIir vc
sonu tckrar yigita konuIur. Artik bir sonraki opcrator`n opcrand`i oImaya hazirdir.

Birok derleyici 3*2+5*6 gibi bir inIix iIadcnin dcgcrini hcsapIayacagi zaman
postIix Iorma dnstrdktcn (bcIirsizIigi ortadan kaIdirdiktan sonra) sonucu
hcsapIar : 3 2 * 5 6 * (SckiI 5.3).










$ekil 5.3 : Bir postIix iIadcnin 3 2 * 5 6 * sonucunun hcsapIanmasi











2
3

top




6

3 2 *
top


6
5
6

5 6
top
Son iki cIcman yigittan ikariIir, isIcm yapiIir, sonu yigita ycrIcstiriIir.



30
6

*
top
+
top




36

VERI YAPILARI (Gz 2002-2003) BIm 5 : YIGIT
Y. Do. Dr. Aybars UGUR 56
Algoritma : (Bir postfix ifadenin sonucunu hesaplar)

opndstk = the empty stack;
// scan the input string reading one element at a time into symb
while (not end of input) {
symb = next input character;
if (symb is an operand)
push(opndstk,symb);
else {
// symb is an operator
opnd2 = pop(opndstk);
opnd1 = pop(opndstk);
value = result of applying symb (case *,/,+,-) to opnd1 and opnd2
push(opndstk,value);
} // end else
} // end while
return(pop(opndstk));

(optional : read program to evaluate a postfix expression, converting an expression from
infix to postfix from textbook).


5.7 Fonksiyon ve metot agrmlar

YigitIar, IistcIcrin tcrs sirada yazdiriImasi, paIindrom (okundugunda vc tcrstcn
okundugunda ayni sonucu vcrcn karaktcr dizisi) bcnzcri yapiIarin buIunmasi, bir
iIadcdcki parantcz gibi scmboIIcrin gccrIiIiginin tcst cdiImcsi, iIadcIcrin
sonuIarinin hcsapIanip dcgcrIcrinin cIdc cdiImcsi, inIix iIadcIcrin postIix
iIadcyc dnstrImcsi gibi amaIarIa kuIIaniIabiIdigi gibi, programlama dili
dcrIcyiciIcri (compiIcr) Ionksiyon agrimIarinda da yigitIardan yararIanirIar.

Bir Ionksiyon agriIdiginda, agiran Ionksiyonun ycrcI dcgiskcnIcri sistcm
taraIindan kaydcdiImcIidir; aksi haIdc agriIan Ionksiyon agiran Ionksiyonun
dcgiskcnIcrini vc dcgcrIcrini ortadan kaIdiracaktir. Ayrica agiran Ionksiyonda
kaIinan nokta (gcri dns adrcsi), agriIan Ionksiyonun bitmcsindcn sonra gcri
dnmck zcrc tutuImaIidir.

Soyut oIarak bakiIdiginda, ycni bir Ionksiyonun agriImasi iIc agiran
fonksiyonun dcgiskcnIcri vc gcri dnIccck adrcs bir kagida kaydcdiIir vc daha
ncc agriIan IonksiyonIara iIiskin biIgiIcrin tutuIdugu kagitIarin zcrinc
konuIur. Bundan sonra dcnctim agriIan Ionksiyona gccr. Kcndi dcgiskcnIcrinc
ycr aarak onIar zcrindc isIcmIcr yapiImasini sagIar. Fonksiyondan gcri
dnIcccgi zaman cn sttcki kagida bakiIip dcgiskcnIcr zcrindc iIgiIi
dcgisikIikIcr yapiIarak gcri dns adrcsinc atIanir. DcrIcyici bu isIcmIcri kagit
ycrinc yigit kuIIanarak gcrckIcstirir.
VERI YAPILARI (Gz 2002-2003) Blm 6 : KUYRUKLAR
Y. Do. Dr. Aybars UGUR 57
BLM 6
KUYRUKLAR (QUEUES)

6.1 Giriy

Bu bImdc gcrck yasamdaki kuyrukIarin biIgisayardaki gstcrimIcri zcrindc
duruIacaktir. KuyrukIar, cIcman ckIcmcIcrin sondan (rcar) vc cIcman
ikarmaIarin bastan (Iront) yapiIdigi vcri yapiIaridir. Bir cIcman ckIcncccgi
zaman kuyrugun sonuna ckIcnir. Bir cIcman ikariIacagi zaman kuyrukta
buIunan iIk cIcman ikariIir. Bu cIcman da kuyruktaki cIcmanIar iindc iIk
ckIcncn cIcmandir. Bu ncdcnIc kuyrukIara FIFO (First-In First-Out = ilk giren
iIk ikar) IistcIcri dc dcniImcktcdir. Gcrck yasamda da bankaIarda, durakIarda,
giscIcrdc, spcrmarkctIcrdc, otoyoIIarda kuyrukIar oIusmaktadir. Kuyruga iIk
oIarak gircnIcr isIcmIcrini iIk oIarak tamamIayip kuyruktan ikarIar. Vcri
yapiIarindaki kuyrukIar bu tr vcri yapiIarinin simIasyonunda kuIIaniImaktadir.
Ayrica isIcmci, yazici, disk gibi kaynakIar zcrindcki isIcmIcrin yrtImcsindc
vc biIgisayar agIarinda pakctIcrin ynIcndiriImcsindc dc kuyrukIardan
yararIaniImaktadir.


6.2 Kuyruk ylemleri ve Tanmlar

insert(q,x) : q kuyrugunun sonuna x cIcmanini ckIcr. (cnqucuc)
x=remove(q) : q kuyrugunun basindaki cIcmani siIcrck x'c atar. (dcqucuc)

( Seimlik : Stacks and Queues konusunu okuyun )


6.3 ncelik Kuyrugu (Priority Queue)

YigitIarda vc kuyrukIarda cIcmanIar ckIcnmc sirasinda dayaIi oIarak siraIanirIar.
YigitIarda iIk oIarak son ckIcncn, kuyrukIarda isc iIk ckIcncn cIcman ikariIir.
EIcmanIar arasindaki gcrck siraIama (sayisaI sira vcya aIIabctik sira gibi)
dikkatc aIinmaz.

nccIik kuyrukIari, tcmcI kuyruk isIcmIcrinin sonuIarini cIcmanIarin gcrck
sirasinin bcIirIcdigi vcri yapiIaridir. AzaIan vc artan sirada oImak zcrc iki tr
nccIik kuyrugu vardir. Artan nccIik kuyrukIarinda cIcmanIar hcrhangi bir ycrc
ckIcncbiIir ama sadccc cn kk cIcman ikariIabiIir. apq, artan nccIik kuyrugu
oImak zcrc pqinscrt(apq,x) x cIcmanini kuyruga ckIcr vc pqmindcIctc(apq) cn
kk cIcmani kuyruktan ikararak dcgcrini dndrr. AzaIan nccIik kuyrugu
isc artan nccIik kuyrugunun tam tcrsidir.

VERI YAPILARI (Gz 2002-2003) Blm 6 : KUYRUKLAR
Y. Do. Dr. Aybars UGUR 58
Artan nccIik kuyrugunda ncc cn kk cIcman, sonra ikinci kk eleman
sirayIa ikariIacagindan doIayi cIcmanIar kuyruktan artan sirayIa ikmaktadirIar.
Birka cIcman ikariIdiktan sonra isc daha kk bir cIcman ckIcnirsc dogaI
oIarak kuyruktan ikariIdiginda nccki cIcmanIardan daha kk bir cIcman
ikmis oIacaktir.

nccIik kuyrukIarinda sadccc sayiIar vcya karaktcrIcr dcgiI karmasik yapiIar da
oIabiIir. rnck oIarak tcIcIon rchbcri Iistcsi, soyad, ad, adrcs vc tcIcIon numarasi
gibi cIcmanIardan oIusmaktadir vc soyada grc siraIidir.

nccIik kuyrukIarindaki cIcmanIarin sirasinin cIcmanIarin aIanIarindan birisinc
grc oImasi gcrckmcz. EIcmanin kuyruga ckIcnmc zamani gibi cIcmanIarin
aIanIari iIc iIgiIi oImayan dissaI bir dcgcrc grc dc siraIi oIabiIirIcr.

nccIik kuyrukIarinin gcrckIcstirimindc dizi kuIIanimi ctkin bir yntcm
dcgiIdir.


6.4 Kuyruk Tasarm ve Kullanm

// Kuyruk sinifi
class Kuyruk
{
private int boyut;
private int[] kuyrukDizi;
private int bas;
private int son;
private int elemanSayisi;

// Yapici Metot (Constructor)
public Kuyruk(int s)
{
boyut = s;
kuyrukDizi = new int[boyut];
bas = 0;
son = -1;
elemanSayisi = 0;
}

public void ekle(int j) // Kuyrugun sonuna eleman ekler
{
if (son==boyut-1) son = -1;
kuyrukDizi[++son] = j;
elemanSayisi++;
}
VERI YAPILARI (Gz 2002-2003) Blm 6 : KUYRUKLAR
Y. Do. Dr. Aybars UGUR 59

public int cikar()
{
int temp = kuyrukDizi[bas++];
if(bas==boyut) bas=0;
elemanSayisi--;
return temp;
}

public boolean bosMu()
{
return(elemanSayisi==0);
}

}


// 1den 10a kadar olan sayilari kuyruga yerlestirip
// sirayla ikaran program
public class KuyrukTest
{
public static void main(String args[])
{
Kuyruk k = new Kuyruk(25);

k.ekle(1);
k.ekle(2);
System.out.println(k.cikar()); // 1
k.ekle(3);
for(int i=4; i<10; ++i)
k.ekle(i);
while(!k.bosMu())
System.out.println(k.cikar());
}

}


VERI YAPILARI (Gz 2002-2003) BIm 7 : ListcIcr vc BagIi ListcIcr
Y. Do. Dr. Aybars UGUR 60
BLM 7
LSTELER ve BAGLI LSTELER (LINKED LISTS)


7.1 Listeler

GnIk yasamda IistcIcr pck ok ycrdc kuIIaniImaktadir. AIisvcris IistcIcri,
adrcs IistcIcri, davctIi IistcIcri gibi. BiIgisayar programIarinda da IistcIcr yararIi
vc yaygin oIarak kuIIaniIan vcri yapiIarindandirIar. ProgramIama aisindan Iistc,
araIarinda dogrusaI iIiski oIan vcriIcr topIuIugu oIarak grIcbiIir. Yigit vc
kuyrukIarin gcnisIctiImcsi yani zcrIcrindcki sinirIamaIarin kaIdiriImasi iIc Iistc
yapisina uIasiIir. Vcri yapiIarinda dcgisik biimIcrdc IistcIcr kuIIaniImakta vc
zcrIcrindc dcgisik isIcmIcr yapiImaktadir.


7.2 Listeler zerindeki Baz ylemler ve Tanmlar

1. EmptyList(List) : returns Boolean
Listcnin bos oIup oImadigini bcIirIcycn Ionksiyon.
2. FullList(List) : returns Boolean
Listcnin doIu oIup oImadigini bcIirIcycn Ionksiyon.
3. LengthList(List) : returns integer
Listcdcki cIcman sayisini buIan Ionksiyon.
4. InsertElement(List, NewElement)
Listeye yeni bir eleman ekleyen fonksiyon.
5. DeleteElement(List, Element)
Listcdcn bir cIcmani arayarak ikartan Ionksiyon.
6. DestroyList(List)
Listcdcki tm cIcmanIari siIcrck bos Iistc birakan Ionksiyon.
7. GetNextItem(List, Element)
Etkin elemandan bir sonrakini dndren fonksiyon
8. RetrieveElement(List, Element, Found)
EIcmanin Iistcdc oIup oImadigini buIan vc dndrcn Ionksiyon.


7.3 Bagl (Baglal) Listeler

Kcndi tipindcki bir yapiyi gstcrcn bir isarcti ycsinc sahip yapiIara scII-
rcIcrcntiaI structurcs adi vcriIir. rnck oIarak :

struct node {
char info;
struct node *next; };
VERI YAPILARI (Gz 2002-2003) BIm 7 : ListcIcr vc BagIi ListcIcr
Y. Do. Dr. Aybars UGUR 61

yapisi, inIo adIi karaktcr tipIi biIgi cIcmaninin yaninda, bir dgm yapisinda bir
bcIIck bIgcsinc isarct cdcn ncxt isarctisinc sahiptir. Bu tr yapiIarin arka
arkaya birbirinc bagIanmasi mantigi IistcIcrdc, yigitIarda, kuyrukIarda vc
agaIarda oIduka yararIidir.

Listcdcki hcr dgmdc bir sonraki dgmn adrcsinin tutuIdugu vcri yapisi
(dogrusaI) bagIi Iistc oIarak adIandiriIir (SckiI 7.1). Listcnin hcr bir cIcmanina
dgm (nodc) adi vcriIir. DgmIcr, biIgi vc bag (adrcs) sahaIarindan
oIusmaktadirIar. Bag sahaIarinda isarctiIcr kuIIaniImaktadir. Listcnin iIk
cIcmanina disaridan bir isarcti (Iist) iIc crisiImcktcdir. Digcr dgmIcrc dc
bagIar yardimi iIc uIasiIabiImcktcdir. Son dgmn sonraki adrcs (ncxt) sahasi
NULL dcgcrini icrir. NULL bagi, Iistc sonunu bcIirtir. EIcmani oImayan Iistc
bos Iistc oIarak adIandiriIir. Hcrhangi bir boyuta dinamik oIarak gcnisIctiIip
daraItiIabiIcn yigit vc kuyrukIarin gcrckIcstirimi bagIi IistcIcr zcrindc
yapiImaktadir.






$ekil 7.1 : DogrusaI BagIi Listc

YigitIarda vc kuyrukIarin gcrckIcstirimindc siraIi bcIIck kuIIaniminin (dizi) cn
byk dczavantaji, hi kuIIaniImasa vcya az kuIIaniIsa biIc sabit miktardaki
bcIIcgin bu yapiIara ayriImis oIarak tutuImasidir. Ayrica sabit bcIIck miktari
asiIdiginda da tasma oIusmasi vc cIcman ckIcmc isIcminin yapiIamamasidir.
BagIi IistcIcr zcrindc gcrckIcstiriIdikIcrindc ise bu problemler ortadan
kaIkmaktadir. BcIIcktcn sadccc gcrcktigi kadar ycr ayriImakta vc bcIIck boyutu
bitcnc kadar bu yapiIara ckIcmc isIcmi yapiIabiImcktcdir.

BagIi IistcIcr, baska vcri yapiIarinin gcrckIcstirimindc kuIIaniIabiIdikIcri gibi
kendileri dc vcri yapisidirIar. BagIi IistcIcrdc cIcmanIarin ckIcnmc vc
ikariImasinda bir sinirIama yoktur. Basa vc sona oIdugu gibi araya da cIcman
ckIcncbiIir; bastan vc sondan oIdugu gibi ortadan da cIcman ikariIabiIir. BagIi
Iistc doIasiIarak hcrhangi bir cIcmanina crisiIcbiIir. Bir bagIi Iistcnin n.
cIcmanina crismck iin n tanc isIcm yapmak yani kcndindcn nccki (n-1)
cIcman zcrindcn gcmck gcrckmcktcdir. EIcmanIarin bcIIcktcki ycrIcri
diziIcrdcki gibi siraIi oImadigindan cIcmanIar vc siraIari iIc ycrIcstikleri bellek
bIgcIcri arasinda bir iIiski yoktur.

BagIi IistcIcrin diziIcr zcrinc avantaji, bir grup cIcman arasina cIcman
ckIcmcdc vc bir grup cIcman arasindan cIcman ikarmada ortaya ikar.
List A B C D E

info next
node
VERI YAPILARI (Gz 2002-2003) BIm 7 : ListcIcr vc BagIi ListcIcr
Y. Do. Dr. Aybars UGUR 62
DiziIcrdc bir cIcman siIcrkcn arada bosIuk kaImasini cngcIIemek iin
iIcrisindcki (sagindaki) tm cIcmanIari bir gcriyc (soIa) kaydirmak gcrckir.
EIcman ckIcmcdc dc ycr amak iin konuIacagi ycrdcki vc iIcrisindcki
cIcmanIari bir iIcriyc (saga) kaydirmak gcrckcccktir. Ka tanc cIcmanin ycr
dcgistircccgi (bircr kaydiriIacagi) dizi boyutuna bagIi oIarak vc ckIcnccck
cIcmanin ycrinc bagIi oIarak dcgiscccktir. BagIi IistcIcrdc isc cIcman ckIcmc vc
ikarma iin yapiIan is Iistc boyutundan bagimsizdir.


7.4 ncelik Kuyruklarnn Bagl Liste Gerekleytirimi

Yntem 1 : (Sral liste tutularak) (Artan siraIi nccIik kuyrugunda)
EIcman ckIcmc, ckIcnccck cIcmanin Iistcyi siraIi tutacak sckiIdc Iistc zcrindc
doIasiIarak araya ckIcnmcsi sckIindc gcrckIcstiriIir. EIcman ikarma da,
Iistcnin iIk cIcmaninin (cn kk dcgcr) ikariImasi iIc gcrckIcstiriIir.

Yntem 2 : (Sral olmayan liste) (Artan siraIi nccIik kuyrugunda)
EIcman ckIcmc kuyrugun hcrhangi bir ycrinc yapiIabiIir. EIcman ikarma isc
cIcman buIunana kadar tm kuyruk boyunca doIasiImasi vc cIcmanin Iistcdcn
ikariImasi iIc gcrckIcstiriIir.

nccIik kuyrukIarinda IistcIcrin siraIanarak kuIIanimi siraIanmadan kuIIanimina
gre daha etkindir.


7.5 Ygt ve Kuyruklarn Bagl Liste Gerekleytirimleri

YigitIarin bagIi Iistc gcrckIcstirimi SckiI 7.2`dc grImcktcdir :

















$ekil 7.2 : YigitIarin bagIi Iistc gcrckIcstirimi. EIcman ckIcmc vc ikarma.
5

3

8

7


Stack
5

3

8

7


Stack
6 ekle
6

5

3

8

7


Stack
EIcman ikar
6
VERI YAPILARI (Gz 2002-2003) BIm 7 : ListcIcr vc BagIi ListcIcr
Y. Do. Dr. Aybars UGUR 63

KuyrukIarin bagIi Iistc gcrckIcstirimi SckiI 7.3`dc grImcktcdir :



















$ekil 7.3 : KuyrukIarin bagIi Iistc gcrckIcstirimi. EIcman ckIcmc vc ikarma.




7.6 Diger Baz Liste Yaplar

Dairesel Bagl Listeler (Circular Linked Lists) : Tm dgmIcrin bir sonraki
dgm gstcrdigi bagIi IistcIcrdir. Son cIcmanin bagi NULL dcgiIdir; iIk
cIcmani gstcrir. ByIccc daircscI bir yapi oIusur.






ift Bagl Listeler (Doubly Linked Lists) : Hcr dgm iki bag icrdigi bagIi
IistcIcrdir. IIk bag kcndindcn nccki dgm gstcrirken ikincisi de kendinden
sonraki dgm gstcrir. iIt bagIi IistcIcrdc, tck bagIi IistcIcrdcki gcriyc dogru
IistcIcmc vc doIasmadaki zorIukIar ortadan kaIkar.








List A B C D E

List
A B C D E
4 1 7 9 3

Front Rear
6 ekle :
4 1 7 9 3

Front Rear
6

EIcman ikar :
1 7 9 3

Front Rear
6
4
VERI YAPILARI (Gz 2002-2003) BIm 7 : ListcIcr vc BagIi ListcIcr
Y. Do. Dr. Aybars UGUR 64
Dairesel ift Bagl Listeler (Circular Doubly Linked Lists) : Hem dairesellik
hem dc iIt bagIiIik zcIIikIcrinc sahip IistcIcrdir. IIk dgmdcn nccki dgm
son, son dgmdcn sonraki dgm dc iIk dgmdr.










7.7 3ava Programlama Dilinde Bagl Liste rnegi ve Kullanm


// Bagli Listenin Dgm Yapisi
//
//
//


class Dugum
{
public int veri; // degiik tiplerde ogaltilabilir
public Dugum sonraki; // sonraki dgmn adresi

public Dugum(int gelenVeri) // Yapici metot
{ veri = gelenVeri; } // Dgm yaratilirken degerini
// aktarir

public void yazdir() // Dgmn verisini yazdirir
{ System.out.print(" "+veri); }
}


// Bagli Liste Yapisi
//
//




class BListe
{
// Listenin ilk dgmnn adresini tutar
private Dugum bas;

List
A B C D E
veri sonraki
Dgm
veri sonraki veri sonraki veri sonraki
bas
VERI YAPILARI (Gz 2002-2003) BIm 7 : ListcIcr vc BagIi ListcIcr
Y. Do. Dr. Aybars UGUR 65
public BListe() // Bir BListe nesnesi yaratildiginda
{ bas = null; } // bo liste olarak ailir.

//Listede anahtar degerini bulur
public Dugum bul(int anahtar)
{
Dugum etkin = bas;
while(etkin.veri != anahtar)
{
if(etkin.sonraki==null)
return null;
else
etkin = etkin.sonraki;
};
return etkin;
}


public void basaEkle(int yeniEleman)
{ // Liste baina eleman ekler
Dugum yeniDugum = new Dugum(yeniEleman);
yeniDugum.sonraki = bas;
bas = yeniDugum;
}


public Dugum sil(int anahtar)
{ // Verilen anahtar degerindeki dgm siler
Dugum etkin = bas;
Dugum onceki = bas;

while(etkin.veri!=anahtar)
{
if(etkin.sonraki==null)
return null;
else
{ onceki = etkin; etkin = etkin.sonraki; }
}

if(etkin==bas)
bas = bas.sonraki;
else
onceki.sonraki = etkin.sonraki;

return etkin;
}

VERI YAPILARI (Gz 2002-2003) BIm 7 : ListcIcr vc BagIi ListcIcr
Y. Do. Dr. Aybars UGUR 66
public void listele()
{ // Bagli Listeyi Batan Sona Listeler
System.out.println();
System.out.print("Bastan Sona Liste : ");
Dugum etkin = bas;
while(etkin!=null)
{ etkin.yazdir(); etkin=etkin.sonraki; }
}

}


// Bir bagli liste oluturarak, Bliste ve Dugum
// siniflarini metotlariyla birlikte test eden sinif

class BListeTest
{
public static void main(String args[])
{
// liste adli bir bagli liste nesnesi yaratir
BListe liste = new BListe();

liste.basaEkle(9);
for(int i=8; i>=1; --i) liste.basaEkle(i);

liste.listele();

int deger = 5;
Dugum d = liste.bul(deger);

if(d==null)
System.out.println("\n"+deger+" Listede Yok");
else
System.out.println("\n"+deger+" Bulundu");

Dugum s = liste.sil(5);

liste.listele();

}

}

Ekran iktisi :
// Bastan Sona Liste : 1 2 3 4 5 6 7 8 9
// 5 Bulundu
// Bastan Sona Liste : 1 2 3 4 6 7 8 9
VERI YAPILARI (Gz 2002-2003) BIm 8 : AIgoritmaIarin KarsiIastiriImasi
Y. Do. Dr. Aybars UGUR 67
BLM 8
ALGORTMALARIN KAR$ILA$TIRILMASI


8.1 Giriy

Bir programin pcrIormansi gcncI oIarak programin isIctimi iin gcrckIi oIan biIgisayar zamani
vc bcIIcgidir. Bir programin zaman karmasikIigi (timc compIcxity) programin isIctim
srcsidir. Bir programin ycr karmasikIigi (spacc compIcxity) programin isIctiIdigi srccc
gcrckIi oIan ycr miktaridir. Bir probIcmin zmndc, kuIIaniIabiIccck oIan aIgoritmaIardan
cn ctkin oIani sciImcIidir. En kisa srcdc zmc uIasan vcya cn az isIcm yapan aIgoritma
tcrcih cdiImcIidir. Burada biIgisayarin yaptigi is ncmIidir. Bazi durumIarda da cn az bcIIck
harcayan aIgoritmanin tcrcih cdiImcsi gcrckcbiIir. Ayrica, programcinin yaptigi is aisindan
vcya aIgoritmaIarin anIasiIirIikIari bakimindan da aIgoritmaIar karsiIastiriIabiIir. Daha kisa
srede biten bir algoritma yazmak iin daha ok kod yazmak veya daha ok bellek kullanmak
gerekebilir (trade-off).

Rakip aIgoritmaIari yaptikIari is aisindan karsiIastirmak iin hcr aIgoritmaya
uyguIanabiIccck somut IIcr tanimIanmaIidir. Ayni isi yapan aIgoritmaIardan daha az
isIcmdc sonuca uIasanin (hizIi oIanin) bcIirIcnmcsi yani daha gcncI oIarak aIgoritma anaIizi
tcorik biIgisayar biIimIcrinin ncmIi bir aIanidir.

YaziIimciIar, iki IarkIi aIgoritmanin yaptikIari isi nasiI Ip karsiIastirirIar? IIk zm
aIgoritmaIari bir programIama diIindc kodIayip hcr iki programi da aIistirarak isIctim
srcIcrini karsiIastirmaktir. IsIctim srcsi kisa oIan daha iyi bir aIgoritma dcniIcbiIir mi? Bu
yntcmdc isIctim srcIcri bcIirIi bir biIgisayara zcIdir. DoIayisi iIc isIctim srcsi dc bu
biIgisayara bagIidir. Daha gcncI bir Im yapabiImck iin oIasi tm biIgisayarIar zcrindc
aIgoritmanin aIistiriImasi gcrckir.

Ikinci zm, isIctiIcn komut vc dcyimIcrin sayisini buImaktir. Fakat bu Im kuIIaniIan
programIama diIinc grc vc programciIarin stiIinc grc dcgisim gstcrir. Bunun ycrinc
aIgoritmadaki kritik gcisIcrin sayisi hcsapIanabiIir. Hcr tckrar iin sabit bir is yapiIiyor vc
sabit bir src gciyorsa, bu I anIamIi haIc gcIir.

Buradan, aIgoritmanin tcmcIindc yatan bir isIcmi ayirarak, bu isIcmin ka kcrc tckrarIandigini
buIma dsnccsi dogmustur. rnck oIarak bir tamsayi dizisindcki tm cIcmanIarin topIamini
hcsapIama isIcmindc gcrckIi oIan is miktarini Imck iin tamsayi topIama isIcmIcrinin sayisi
buIunabiIir. 100 cIcmanIi bir dizidcki cIcmanIarin topIamini buImak iin 99 topIama isIcmi
yapmak gcrckir. n cIcmanIi bir Iistcdcki cIcmanIarin topIamini buImak iin n-1 topIama isIcmi
yapmak gcrckir diyc gcncIIcstirmc yapabiIiriz. ByIccc aIgoritmaIari karsiIastirirkcn bcIirIi
bir dizi boyutu iIc sinirIi kaIinmaz.

Iki gcrcI matrisin arpiminda kuIIaniIan aIgoritmaIarin karsiIastiriImasi istcndigindc, matris
arpimi iin gcrckcn gcrcI sayi arpma vc topIama isIcmIcrinin karisimi bir I oIacaktir.
Bu rncktcn iIgin bir sonuca uIasiIir: Bazi isIcmIcrin agirIigi digcrIcrinc grc IazIadir. Birok
biIgisayarda biIgisayar zamani cinsindcn gcrcI sayi arpimi gcrcI sayi topIamindan ok daha
uzun srcr. DoIayisi iIc tm matris arpimi dsnIdgndc topIama isIcmIcrinin ctkinIik
zcrindcki ctkisi az oIacagindan ihmaI cdiIcbiIirIcr. Sadccc arpma isIcmIcrinin sayisi dikkatc
aIinabiIir. AIgoritma anaIizindc gcncIdc aIgoritmada cgcmcn oIan bir isIcm buIunur vc bu
digcrIcrini grIt (noisc) dzcyinc indirgcr.
VERI YAPILARI (Gz 2002-2003) BIm 8 : AIgoritmaIarin KarsiIastiriImasi
Y. Do. Dr. Aybars UGUR 68
8.2 Algoritmalarda Karmayklk (Complexity) ve Zaman Karmayklg Analizi


8.2.1 yletim Zaman (Running Time)

IsIctim zamanini girdi boyutunun bir Ionksiyonu oIarak cIc aImak tm gccrIi girdileri tek
dcgcrc indirir. Bu da dcgisik aIgoritmaIari karsiIastirmayi koIayIastirir. En yaygin karmasikIik
lleri Worst Casc Running Timc (cn kt durum isIctim srcsi) vc Avcragc-Case
Running Timc (ortaIama durum isIctim srcsi)`dir.

Worst-Case Running Time :
Bu isIctim srcsi, hcr girdi boyutundaki hcrhangi bir girdi iin cn uzun isIctim srcsini
tanimIar. rnck oIarak bir programin cn kt ihtimaIIc nc kadar srcccginin tahmin cdiImcsi
istcncn bir durumdur. n cIcmanIi bir Iistcdc siraIi arama en kt ihtimalle (aranan
buIunamazsa) n karsiIastirma gcrcktircccktir. Yani worst-casc running timc (isIctim zamani)
T(n) - n`dir. Tm probIcmIcrdc sadccc cn kt girdi dikkatc aIindigi iin worst-case running
timc dcgcrini hcsapIamak grcccIi oIarak koIaydir.

Average-Case Running Time :
Bu isIctim srcsi, hcr girdi boyutundaki tm girdiIcrin ortaIamasidir. n cIcmanin hcr birinin
aranma oIasiIiginin csit oIdugu varsayiIdiginda vc Iistc disindan bir cIcman aranmayacagi
varsayiIdiginda ortaIama isIctim srcsi (n1)/2`dir. Ikinci varsayim kaIdiriIdiginda ortaIama
isIctim srcsi |(n1)/2,n| araIigindadir (aranan cIcmanIarin Iistcdc oIma cgiIiminc bagIi
oIarak). OrtaIama durum anaIizi basit varsayimIar yapiIdiginda biIc zordur vc varsayimIar da
gerek performansin iyi tahminIcncmcmcsinc ncdcn oIabiIir.


8.2.2 Asimptotik Analiz

AIgoritmaIarin karsiIastiriImasinda asimptotik ctkinIikIcri dc dikkatc aIinabiIir. Girdi boyutu
sonsuza yakIasirkcn isIctim srcsinin artisi. Asimptotik gstcrimin cIcmani oIan 4 nemli
gstcrim vardir : O-notation, o-notation, -notation, -notation. Burada sadece O gsterimi
zcrindc duruIacaktir. O gstcrimi, IonksiyonIarin artis oraninin st sinirini bcIirIcr. O(I(n)),
I(n) Ionksiyonundan daha hizIi artmayan IonksiyonIar kmcsini gsterir.

8.2.2.1 Big-O Gsterimi (notasyonu)

n cIcmanIi bir Iistcdcki cIcmanIarin topIamini buImak iin n-1 topIama isIcmi yapmak gcrckir
diyc gcncIIcstirmc yapmistik. YapiIan isi, girdi boyutunun bir Ionksiyonu oIarak cIc aImis
olduk. Bu fonksiyon yakIasimini matcmatikscI gstcrim kuIIanarak iIadc cdcbiIiriz : Big-O (O
harIi, 0 sayisi dcgiI) gstcrimi vcya bykIk dcrcccsi (ordcr oI magnitudc). BykIk
dcrcccsini probIcmin boyutuna bagIi oIarak Ionksiyonda cn hizIi artis gstcrcn tcrim bcIirIcr.
rnek olarak :

f(n) = n
4
+ 100n
2
+ 10n + 50 = O(n
4
)

fonksiyonunda n'in derecesi n
4
'tr yani n'in byk dcgcrIcri iin Ionksiyonu cn IazIa n
4
etkiler.
Pcki daha dsk dcrcccIi dcyimIcrc nc oImaktadir? n'in ok byk dcgcrIcri iin n
4
,
100n
2
'den, 10n'dcn vc 50'dcn ok byk oIacagindan daha dsk dcrcccIi tcrimIcr dikkatc
VERI YAPILARI (Gz 2002-2003) BIm 8 : AIgoritmaIarin KarsiIastiriImasi
Y. Do. Dr. Aybars UGUR 69
aIinmayabiIir. Bu digcr tcrimIcrin, isIcm srcsini ctkiIcmcdikIcri anIamina gcImcz; bu
yakIasim yapiIdiginda n'in ok byk dcgcrIcrindc ncm tasimadikIari anIamina gcIir.

n, problemin boyutudur. Yigit, Iistc, kuyruk, aga gibi vcri yapiIarinda cIcman sayiIaridir. n
cIcmanIi bir dizi gibi ...

Bir Iistcdcki tm cIcmanIarin dosyaya yaziImasi iin nc kadar is yapiIir : Ccvap, Iistcdcki
cIcman sayisina bagIidir.

Algoritma
OPEN (Rewrite) the file
WHILE more elements in list DO
Print the next element

IsIcmi yapmak iin gccn src :
(n*(Bir cIcmanin dosyaya yaziImasi iin gccn src))dosyanin aiImasi sirasinda gccn src

AIgoritma O(n)'dir (AIgoritmanin zaman karmasikIigi O(n)`dir) . nk, n tanc isIcm
sadccc dosya aiImasi isIcmi vardir. YzIcrcc cIcmanin dosyaya kaydcdiIdigi dsnIrsc,
dosya aiImasi sirasinda gccn src miktari rahatIikIa ihmaI cdiIcbiIir. Ama az sayida cIcman
varsa dosya aiImasi sirasinda gccn src miktari ncm tasiyabiIir vc topIam srcyc katiIimi
daha fazla olur.

Bir aIgoritmanin bykIk dcrcccsi, biIgisayarda isIctiIdigindc sonucun nc kadar srcdc
aIinacagini bcIirtmcz. Bazcn dc bu tr bir biIgiyc gcrcksinim duyuIur. rnck oIarak bir kcIimc
isIcmcinin 50 sayIaIik bir yazi zcrindc yazim dcnctimi yapma srcsinin birka saniyc
dzcyindcn IazIa oImamasi istcnir. ByIc bir biIgi istcndigindc, Big-O anaIizi ycrinc digcr
ImIcr kuIIaniImaIidir. Program dcgisik yntcmIcrc grc kodIanir vc karsiIastirma yapiIir.
Programin aIistiriImasindan ncc vc sonra biIgisayarin saati kaydcdiIir. Iki saat arasindaki
Iark aIinarak gccn src buIunur. Bu tr bir "Bcnchmark" tcsti, isIcmIcrin bcIirIi bir
biIgisayarda bcIirIi bir isIcmci vc bcIirIi kaynakIar kuIIaniIarak nc kadar srdgn gstcrir.

BiIgisayarin yaptigi isin programin boyutu iIc, rnck oIarak satir sayisi iIc iIgiIi oImasi
gcrckmcz. N cIcmanIi bir diziyi 0`Iayan iki program da O(n) oIdugu haIdc kaynak kodIarinin
satir sayiIari oIduka IarkIidir :















Program 1 :

dizi[0] = 0;
dizi[1] = 0;
dizi[2] = 0;
dizi[3] = 0;
.....................
dizi[n-1] = 0;
Program 2 :

for(int i=0; i<n; ++i)
dizi[i] = 0;
VERI YAPILARI (Gz 2002-2003) BIm 8 : AIgoritmaIarin KarsiIastiriImasi
Y. Do. Dr. Aybars UGUR 70
1`dcn n`c kadar oIan sayiIarin topIamini hcsapIayan iki kisa programi dsncIim :








Program 1, O(n)`dir. n-50 oIursa programin aIismasi sirasinda n-5 iin harcanan srcnin
yakIasik 10 kati src harcanacaktir. Program 2 isc O(1)`dir. n-1 dc oIsa n=50de olsa program
ayni srcdc bitcr.


8.2.2.2 Arty Oran Fonksiyonlar

Yaygin oIarak kuIIaniIan bazi artis orani IonksiyonIar SckiI 8.1`dc gstcriImcktcdir.












$ekil 8.1 : Yaygin artis oranIari

O(1) : Sabit zaman
rnck : n cIcmanIi bir dizinin i. cIcmanina bir dcgcr atanmasi O(1)`dir. nk bir cIcmana
indisindcn dogrudan crisiImcktcdir.
O(n) : DogrusaI zaman
rnck : n cIcmanIi bir dizinin tm cIcmanIarinin ckrana yazdiriImasi O(n)`dir.
rnck : siraIi oImayan bir dizidcki (Iistcdcki) cIcmanIardan birinin aranmasi O(n)`dir (cn kt
durumda da, ortalama durumda da).
O(log
2
n) : O(1)`dcn IazIa O(n)`dcn azdir.
rnck : SiraIi bir Iistcnin cIcmanIari iindc ikiIi arama (binary scarch) uyguIanarak bcIirIi bir
dcgcrin aranmasi O(Iog
2
n)dir.
O(n
2
) : Ikinci dcrcccIi zaman
rnck : Basit siraIama aIgoritmaIarinin birogu (scIcction sort gibi) O(n
2
)dir.
O(n log
2
n) : Bazi hizIi siraIama aIgoritmaIari O(n Iog
2
n)dir.
O(n
3
) : Kbik zaman
rnck : boyutIu bir tamsayi tabIosundaki hcr cIcmanin dcgcrini artiran aIgoritma.
O(2
n
) : stcI zaman, ok byk dcgcrIcrc uIasir.



Program 1 :

toplam = 0;
for(int i=0; i<n; ++i)
toplam = toplam + i;
Program 2 :

toplam = n * (n+1) / 2;
Fonksiyon sim
1 constant
logn logarithmic
n linear
n log n n log n
n
2
quadratic
n
3
cubic
2
n
exponential
n! factorial

VERI YAPILARI (Gz 2002-2003) BIm 8 : AIgoritmaIarin KarsiIastiriImasi
Y. Do. Dr. Aybars UGUR 71
8.2.2.3 Pratikte Karmayklk

Dcgisik artis IonksiyonIarinin aIdikIari dcgcrIcrc grc bir tabIo, SckiI 8.2`dc gstcriImistir.










$ekil 8.2 : Dcgisik IonksiyonIarin I(n) dcgisik girdi boyutIarina (n) grc dcgcrIcri

Bir programin isIctimi n
3
adim sryorsa, vc n-1000 isc, program 1000
3
adim srccck
dcmcktir. Yani 1 000 000 000 (bir miIyar) adim.
KuIIaniIan biIgisayar saniycdc 1 000 000 000 adimi gcrckIcstircbiIccck kadar hizIi ise bu
program tam 1 saniye srecektir.

SckiI 8.2`dcki IonksiyonIardan cIdc cdiImis bir graIik SckiI 8.3`tc grImcktcdir.















$ekil 8.3 : Dcgisik IonksiyonIarin graIikIcri
logn n nlogn n
2
n
3
2
n

0 1 0 1 1 2
1 2 2 4 8 4
2 4 8 16 84 16
3 8 24 64 512 256
4 16 64 256 4096 65536
5 32 160 1024 32768
4294967
296

0
10
20
30
40
50
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Q
I

log
2
n
n
n log
2
n
n
2
2
n
n
3

VERI YAPILARI (Gz 2002-2003) BIm 10 : SiraIama
Y. Do. Dr. Aybars UGUR 72
BLM 9
SIRALAMA (SORTING)


9.1 Giriy

SiraIama vc arama tcknikIcrindcn pck ok programda yararIaniImaktadir. GnIk
yasamimizda cIcmanIarin siraIi tutuIdugu IistcIcr yaygin oIarak kuIIaniImaktadir. TcIcIon
rchbcrindcki bir kisinin tcIcIon numarasinin buIunmasi bir arama (scarch) isIcmidir. TcIcIon
rehberlerindeki kayitIar kisiIcrin soyadIarina grc siraIidir. Bir tcIcIon numarasinin kimc ait
oIdugunu buImaya aIismak da bir baska arama isIcmidir. Egcr tcIcIon rchbcri kisiIcrin
soyadIarina grc aIIabctik oIarak dcgiI dc tcIcIon numaraIarina grc kronoIojik oIarak siraIi
oIursa bu, arama isIcmini basitIcstirir. KtphancIcrdcki kitapIarin zcI yntcmIcrc grc
siraIanarak raIIara diziImcsi, biIgisayarin bcIIcgindcki sayiIarin siraIanmasi da yapiIacak
arama isIcmIcrini hizIandirir vc koIayIastirir. GcncI oIarak cIcman topIuIukIari, biIgisayarda
da, tcIcIon rchbcri gibi rnckIcrdc dc daha ctkin crismck (aramak vc biIgi gctirmck) zcrc
siraIanir vc siraIi tutuIurIar.

EIcman (kayit, yapi ...) topIuIukIari gcncIdc (hcr zaman dcgiI) bir anahtara grc siraIi
tutulurlar. Bu anahtar gcncIdc cIcmanIarin bir aIt aIani yani ycsidir (EIcmanIar soyada grc
siraIi oIursa soyadi anahtardir, numaraya grc siraIi oIursa numara anahtardir, nota grc oIursa
not aIani anahtardir). EIcmanIar topIuIugu iindcki hcr cIcmanin anahtar dcgcri kendinden
ncc gcIcn cIcmanin anahtar dcgcrindcn byksc artan sirada, kksc azaIan sirada siraIidir
denilir (ilgili anahtara gre).

SiraIama, siraIanacak cIcmanIar bcIIcktc isc intcrnaI (iscI), kayitIarin baziIari ikinciI bcIIck
ortamindaysa cxtcrnaI (dissaI) siraIama oIarak adIandiriIir.

SiraIama vc arama arasinda bir iIiski oIdugundan bir uyguIamada iIk soru siraIama gcrckIi
midir? oImaIidir. Arama isIcmIcri yogun isc, siraIamanin vcya o sckiIdc tutmanin gctircccgi
yk, siraIi oImayan kayitIar zcrindcki arama isIcmIcrinin gctircccgi topIam yk yaninda ok
haIiI kaIacaktir. Bu karar vcriIirsc, arkasindan siraIamanin nasiI yapiIacagi vc hangi siraIama
yntcmIcrinin kuIIaniIacagi kararIastiriImaIidir. Bunun ncdcni, tm digcr yntcmIcrdcn stn
evrenscI bir siraIama tckniginin oImamasindandir.
















VERI YAPILARI (Gz 2002-2003) BIm 10 : SiraIama
Y. Do. Dr. Aybars UGUR 73
9.2 SIRALAMA TEKNKLERNN ETKNLKLER ve ANALZ


9.2.1 Bubble Sort (Exchange Sorts kapsamnda)

BubbIc sort, siraIama tcknikIcri iindc anIasiImasi vc programIanmasi koIay oImasina ragmen
ctkinIigi cn az oIan aIgoritmaIardandir (n cIcmanIi x dizisi iin) :

void bubble(int x[], int n)
{
int hold, j, pass; int switched = TRUE;

for (pass=0; pass<n-1 && switched == TRUE; pass++)
{
switched = FALSE;
for(j=0; j<n-pass-1; j++)
{
if (x[j] > x[j+1])
{
switched = TRUE;
hold = x[j];
x[j] = x[j+1];
x[j+1] = hold;
};
};
};
}


en fazla (n-1) iterasyon gerektirir.

Veriler : 25 57 48 37 12 92 86 33
Tekrar 1 : 25 48 37 12 57 86 33 92
Tekrar 2 : 25 37 12 48 57 33 86 92
Tekrar 3 : 25 12 37 48 33 57 86 92
Tekrar 4 : 12 25 37 33 48 57 86 92
Tekrar 5 : 12 25 33 37 48 57 86 92
Tekrar 6 : 12 25 33 37 48 57 86 92
Tekrar 7 : nceki turda degien eleman olmadigindan
yapilmaz.

Analizi kolaydir (yiletirme yapilmami algoritmada) :
(n-1) iterasyon ve her iterasyonda (n-1) karilatirma.
Toplam karilatirma sayisi : (n-1)*(n-1) = n
2
- 2n + 1 = O(n
2
)

(Yukaridaki gibi iyiletirme yapilmi algoritmada etkinlik) :
iterasyon i'de, (n-i) karilatirma yapilacaktir.
Toplam karilatirma sayisi = (n-1)+(n-2)+(n-3)+...+(n-k)
= kn - k*(k+1)/2
= (2kn - k
2
- k)/2
ortalama iterasyon sayisi, k, O(n) oldugundan = O(n
2
)
VERI YAPILARI (Gz 2002-2003) BIm 10 : SiraIama
Y. Do. Dr. Aybars UGUR 74
9.2.2 Quicksort (Exchange Sorts kapsamnda)

#include <stdio.h>


void qsort2(double *left, double *right)
{
double *p = left, *q = right, w, x=*(left+(right-left>>1));
do
{
while(*p<x) p++;
while(*q>x) q--;
if(p>q) break;
w = *p; *p = *q; *q = w;
} while(++p <= --q);
if(left<q) qsort2(left,q);
if(p<right) qsort2(p,right);
}

void main()
{
double dizi[8] = { 23, 398, 34, 100, 57, 67, 55, 320 };
qsort2( &dizi[0], &dizi[7] );
}

n elemanli bir dizi siralanmak istendiginde dizinin herhangi
bir yerinden x elemani seilir (rnek olarak ortasindaki
eleman). X elemani j. yere yerletiginde 0. le (j-1). yerler
arasindaki elemanlar x'den kk, j+1'den (n-1)e kadar olan
elemanlar x'den byk olacaktir. Bu koullar
gerekletirildiginde x, dizide en kk j. elemandir. Ayni
ilemler, x[0]-x[j-1] ve x[j+1]-x[n-1] alt dizileri
(paralari) iin tekrarlanir. Sonuta veri grubu siralanir.



23 398 34 100 57 67 55 320 3. eleman
23 55 34 67 57 [100] 398 320
[23] [34] 55 67 57 [100] [320] [398]
[23] [34] [55] 67 57 [100] [320] [398]
[23] [34] [55] [57] [67] [100] [320] [398]

Eger ansli isek, seilen her eleman ortanca degere yakinsa
log
2
n iterasyon olacaktir = O(n log
2
n). Ortalama durumu iletim
zamani da hesaplandiginda O(n log
2
n)dir, yani genelde byle
sonu verir. En kt durumda ise paralama dengesiz olacak ve
n iterasyonla sonulanacaginda O(n
2
) olacaktir (en kt durum
iletim zamani).

VERI YAPILARI (Gz 2002-2003) BIm 10 : SiraIama
Y. Do. Dr. Aybars UGUR 75
9.2.3 Straight Selection Sort (Selection Sorts kapsamnda)

EIcmanIarin sciIcrck uygun ycrIcrinc konuImasi iIc gcrckIcstiriIcn bir siraIamadir :

void selectsort(int x[], int n)
{
int i, indx, j, large;
for(i=n-1; i>0; i--)
{
large = x[0];
indx = 0;
for(j=1; j<=i; j++)
if(x[j]>large)
{
large = x[j];
indx = j;
};
x[indx] = x[i];
x[i] = large;
};
}

Veriler : 25 57 48 37 12 92 86 33
Tekrar 1 : 25 57 48 37 12 33 86 92
Tekrar 2 : 25 57 48 37 12 33 86 92
Tekrar 3 : 25 33 48 37 12 57 86 92
Tekrar 4 : 25 33 12 37 48 57 86 92
Tekrar 5 : 25 33 12 37 48 57 86 92
Tekrar 6 : 25 12 33 37 48 57 86 92
Tekrar 7 : 12 25 33 37 48 57 86 92

Selection Sort'un analizi dogrudandir.
1. turda (n-1),
2. turda (n-2),
3. ...
(n-1). Turda 1, karilatirma yapilmaktadir.

Toplam karilatirma sayisi = (n-1)+(n-2)+...+1 = n*(n-1)/2
= (1/2)n
2
-(1/2)n = O(n
2
)












VERI YAPILARI (Gz 2002-2003) BIm 10 : SiraIama
Y. Do. Dr. Aybars UGUR 76
9.2.4 Simple Insertion Sort (Insertion Sorts kapsamnda)

EIcmanIarin sirasina uygun oIarak Iistcyc tck tck ckIcnmcsi iIc gcrckIcstiriIcn siraIamadir :

void insertsort(int x[], int n)
{
int i,k,y;
for(k=1; k<n; k++)
{
y=x[k];
for(i=k-1; i>=0 && y<x[i]; i--)
x[i+1]=x[i];
x[i+1]=y;
};
}

Veriler 25 57 48 37 12 92 86 33
Tekrar 1 25 57 48 37 12 92 86 33
Tekrar 2 25 48 57 37 12 92 86 33
Tekrar 3 25 37 48 57 12 92 86 33
Tekrar 4 12 25 37 48 57 92 86 33
Tekrar 5 12 25 37 48 57 92 86 33
Tekrar 6 12 25 37 48 57 86 92 33
Tekrar 7 12 25 33 37 48 57 86 92

Eger veriler sirali ise her turda 1 karilatirma yapilacaktir
ve O(n) olacaktir. Veriler ters sirali ise toplam
karilatirma sayisi: (n-1)+(n-2)+...+3+2+1 = n*(n+1)/2 = O(n
2
)
olacaktir.

Simple Insertion Sort'un ortalama karilatirma sayisi ise
O(n
2
)dir.

Selection Sort ve Simple Insertion Sort, Bubble Sort'a gre
daha etkindir. Selection Sort, Insertion Sort'tan daha az
atama ilemi yaparken daha fazla karilatirma ilemi yapar.
Bu nedenle Selection Sort byk kayitlardan oluan az elemanli
veri gruplari iin (atamalarin sresi ok fazla olmaz) ve
karilatirmalarin daha az yk getirecegi basit anahtarli
durumlarda uygundur. Tam tersi iin, insertion sort uygundur.
Elemanlar bagli listedelerse araya eleman eklemelerde veri
kaydirma olmayacagindan insertion sort mantigi uygundur.

n'in byk degerleri iin quicksort insertion ve selection
sort'tan daha etkindir. Quicksort'u kullanmaya balama noktasi
yaklaik 30 elemanli durumlardir; daha az elemanin siralanmasi
gerektiginde insertion sort kullanilabilir.




VERI YAPILARI (Gz 2002-2003) BIm 10 : SiraIama
Y. Do. Dr. Aybars UGUR 77
9.2.5 Merge Sort (Merge Sorts kapsamnda)

SiraIi iki vcri grubunu birIcstircrck nc bir siraIi vcri grubu cIdc ctmcyc dayanir.

#include <stdio.h>
#define numelts 8

void mergesort(int x[], int n)
{
int aux[numelts], i,j,k,l1,l2,size,u1,u2;
size = 1;
while(size<n) {
l1 = 0;
k = 0;
while(l1+size<n) {
l2 = l1+size;
u1 = l2-1;
u2 = (l2+size-1<n) ? l2+size-1 : n-1;
for(i=l1,j=l2; i<=u1 && j<=u2; k++)
if(x[i]<=x[j]) aux[k]=x[i++]; else aux[k]=x[j++];
for(;i<=u1;k++) aux[k] = x[i++];
for(;j<=u2;k++) aux[k] = x[j++];
l1 = u2+1;
};
for(i=l1;k<n;i++)
aux[k++] = x[i];
for(i=0;i<n;i++)
x[i]=aux[i];
size*=2;
};
}


Veriler [25] [57] [48] [37] [12] [92] [86] [33]


Tur 1 [25 57] [37 48] [12 92] [33 86]


Tur 2 [25 37 48 57] [12 33 86 92]



Tur 3 [12 25 33 37 48 57 86 92]


Analiz : log
2
n tur ve her turda n veya daha az karilatirma.
= O(n log
2
n) karilatirma. Quicksortta en kt durumda O(n
2
)
karilatirma gerektigi dnlrse daha avantajli. Fakat
mergesortta atama ilemleri fazla ve aux dizi iin daha fazla
yer gerekiyor.
VERI YAPILARI (Gz 2002-2003) BIm 11 : IZGELER vc UyguIamaIari
Y. Do. Dr. Aybars UGUR 78
BLM 10
ZGELER (GRAPHS) ve UYGULAMALARI

10.1 Terminoloji

izge (Graph) : Ksc (vcrtcx) adi vcriIcn dgmIcrdcn vc kcnar (cdgc) adi vcriIip kscIcri
birbirinc bagIayan bagIantiIardan oIusan vcri yapisidir. Ayncn agaIar gibi izgcIcr dc
dogrusaI oImayan vcri yapiIari grubuna gircrIcr.

graph G-(V,E), sonIu V vc E cIcmanIari kmcsidir.

V`nin cIcmanIari kscIcr (vcrticcs) oIarak adIandiriIir. E`nin cIcmanIari da kcnarIar (cdgcs)
oIarak adIandiriIir. E`nin iindcki hcr kcnar V iindcki iki IarkIi kscyi birIcstirir. Bir izgcdc
kscIcr daircIcrIc, kcnarIar da izgiIcrIc gstcriIir (SckiI 10.1).













$ekil 10.1 : izge

Ynsz Kenar (undirected edge) : izgi sckIindc yn bcIirtiImcycn kcnarIar ynsz
kcnarIardir. Ynsz kcnarIarda (v
1
,v
2
) oImasi iIc (v
2
,v
1
) oImasi arasinda Iark yoktur. rnckIcr:
SckiI 10.1`dcki izgcdcki kcnarIar.

Ynl Kenar (directed edge) : Ok sckIindc gstcriIcn kcnarIar ynI kcnarIardir (SckiI
10.2). (i,j)`dc okun basi ikinci kscyi (j), okun kuyrugu birinci kscyi (i) gstcrir. Bazi
kitapIarda i,j sckIindc gstcriIir.












$ekil 10.2 : Ynl ve Bagl izge


v
1


v
2
v
3


v
4

e
1

e
2

e
3

e
4

G=(V,E)
V={v
1
,v
2
,v
3
,v
4
}
E={(v
1
,v
2
),(v
1
,v
3
),(v
3
,v
4
),(v
1
,v
4
)}
e
1
=(v
1
,v
2
)
e
2
=(v
1
,v
3
)
e
3
=(v
3
,v
4
)
e
4
=(v
1
,v
4
)
E={e
1
,e
2
,e
3
,e
4
}
1

2 3

4
G
1
=(V,E)
V
1
={1,2,3,4}
E
1
={(1,2),(1,3),(1,4),(4,3)}
VERI YAPILARI (Gz 2002-2003) BIm 11 : IZGELER vc UyguIamaIari
Y. Do. Dr. Aybars UGUR 79
Komyu Kyeler (Adjacent) : AraIarinda dogrudan bagIanti (kcnar) buIunan i vc j kscIcri
komsudur. Digcr ksc iItIcri komsu dcgiIdir. rnck : (SckiI 10.1`dc) v1 vc v2; v1 vc v3; v1
vc v4; v3 vc v4 ksc iItIcri komsudur.

Baglant (incident) : Komsu i vc j kscIcri arasindaki kcnar (i,j) bagIantidir.

Bir Kyenin Derecesi (degree) : Bir kscyc bagIi oIan kcnarIarin sayisidir. SckiI 10.1`dc
v1in derecesi 3, v2nin derecesi 1, v3n derecesi 2, v4n derecesi 2dir.

Indegree, Outdegree : Ynl izgede, ynl kcnar (i,j), j kscsinc gcIcndir (incidcnt to), i
kscsindcn ikandir (incidcnt Irom). Bir kscyc gcIcnIcrin sayisina indcgrcc, bir kscdcn
ikanIarin sayisina outdcgrcc dcniIir. SckiI 10.2`dcki kscIcrin indcgrcc vc outdcgrcc`Icrini
bulunuz.

Ynsz izge (undirected graph) : Tm kcnarIari ynsz oIan izgcyc ynsz izgc dcniIir.
Ynsz izgcdc bir ksc iIti arasinda cn IazIa bir kcnar oIabiIir.

Ynl izge (directed graph, digraph) : Tm kcnarIari ynI oIan izgcyc ynI izgc adi
verilir. Ynl izgcdc bir ksc iIti arasinda tcrs ynIcrdc oImak zcrc cn IazIa iki kcnar
olabilir.

Dng (Loop) : (i,i) sckIindc gstcriIcn vc bir kscyi kcndinc bagIayan kcnar.

Agrlkl izge (weighted graph) : Hcr kcnara bir agirIik (wcight) vcya maIiyct (cost)
dcgcrinin atandigi izgc (SckiI 10.3).








$ekil 10.3 : AgirIikIi izgc

Yol (path) : G(V,E) izgesinde i
1
ve i
k
kscIcri arasinda P-i
1
,i
2
,...,i
k
sckIindc bcIirtiIcn
kscIcr dizisi (E`dc, 1-jk oImak zcrc, hcr j iin (i
j
, i
j+1
) sckIindc gstcriIcn bir kenar
varsa). SckiI 10.3`tc IZMIR`dcn ANKARA`ya dogrudan vcya ISTANBUL`dan gccrck
gidiIcbiIir (IZMIR ISTANBUL ANKARA).

Basit Yol (Simple Path) : Tm dgmIcrin IarkIi oIdugu yoIdur.

Uzunluk : Bir yoI zcrindcki kcnarIarin uzunIukIari topIami o yoIun uzunIugudur.

Bagl izge (Connected Graph) : Hcr ksc iIti arasinda cn az bir yoI oIan aga.





IZMIR

ANKARA ISTANBUL

10 12
5
VERI YAPILARI (Gz 2002-2003) BIm 11 : IZGELER vc UyguIamaIari
Y. Do. Dr. Aybars UGUR 80
Alt izge (Subgraph) : H izgcsinin ksc vc kcnarIari G izgcsinin ksc vc kcnarIarinin aIt
kmesi ise; H izgesi G izgesinin alt izgesidir (subgraph).

Daire veya devir (Cycle) : BasIangi vc bitis kscIcri ayni oIan basit yoI. SckiI 10.3`tc
IZMIR ISTANBUL ANKARA IZMIR.

Aga (tree) : Dairc icrmcycn ynsz bagIi izgc.

Spanning Tree : G`nin tm kscIcrini icrcn bir aga sckIindcki aIt izgcIcrdcn hcr biri.

Forest : BagIi oIma zorunIuIugu oImayan aga.

Complete Graph : n ksc sayisi oImak zcrc n*(n-1)/2 kcnari oIan izgc (kcndiIcrinc
bagIanti yok). SckIini dsnnz, 1,2,3,4 ksc sayiIari iin.

Complete Digraph : n ksc sayisi oImak zcrc n*(n-1) kenari oIan izgc.





10.2 izgelerin Kullanm Alanlar

BiIgisayar AgIarinda, cIcktrikscI vc digcr agIarin anaIizindc, kimyasaI biIcsikIcrin moIckIcr
yapiIarinin arastiriImasinda, uIasim agIarinda (kara, dcniz vc havayoIIari), pIanIama
projelerinde, sosyal aIanIarda vc digcr pck ok aIanda kuIIaniImaktadir.






VERI YAPILARI (Gz 2002-2003) Java`da Hazir Vcri YapiIari vc KoIcksiyonIar
Y. Do. Dr. Aybars UGUR 81
JAVA'DA HAZIR VER YAPILARI ve KOLEKSYONLAR (EK)

Javada veri yapilari diger dillerde oldugu gibi
programlanarak oluturulabildigi gibi, dilde olan hazir
veri yapilari da kullanilabilir.

Collection (koleksiyon), diger verileri tutabilen veri
yapisidir. Koleksiyon arayzleri (collection interfaces),
her tr koleksiyonda yapilabilecek ilemleri tanimlar.
Koleksiyon gerekletirimleri (collection
implementations), bu ilemleri eitli yollarla
gerekletirir. Bazi arayzler : Set, List, Map olup
Java.util paketi iindedirler.

Arayzler

Liste (List) : Sirali bir tr koleksiyondur. Tekrarli
elemanlari ierebilir. Listeler 0. elemandan balar.
Koleksiyondan devraldigi zellikler diinda, indislerine
gre elemanlari ileme (sort,...), eleman arama
(binarySearch) ve elemanlar zerinde dolama gibi
metotlari (ListIterator) da vardir. Liste arayz,
"ArrayList", "LinkedList" ve "Vector" siniflari ile
gerekletirilir. "ArrayList" sinifi, boyutu
degitirilebilen dizidir ve "Vector" sinifindan hizli
aliir. "LinkedList" sinifi ise bagli liste
gerekletirimidir. ok sayida metot devralmaktadirlar.
ift bagli liste, kuyruk, yigit (yigit iin Javada ayrica
sinif da vardir) vs. de gerekletirilebilmektedir.

Kme (Set) : Kme, elemanlari tek (tekrar olmadan) tutan
koleksiyon tipinde veri yapisidir. ki nemli Kme
gerekletirimi : HashSet ve TreeSettir. HashSet,
elemanlarini "Hash" tablosunda tutar, TreeSet ise agata
tutar.











VERI YAPILARI (Gz 2002-2003) Java`da Hazir Vcri YapiIari vc KoIcksiyonIar
Y. Do. Dr. Aybars UGUR 82
JAVA RNEK (bsearch.java) : Siralama, kili Arama

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class bsearch extends JFrame
{
public bsearch()
{
super("BSearch Ornek");

Container c = getContentPane();
c.setLayout(new FlowLayout());
final JTextField tfoutput = new JTextField(10);
c.add(tfoutput);

// int a[] = new int[10];
// float, char, ... iin de yapilabilir.
int a[] = { 4,2,1,8,6,7,9,15,11 };
Arrays.sort(a);
int ind = Arrays.binarySearch(a,4);

tfoutput.setText(""+ind);

setSize(200,150); show();
}

public static void main ( String args[] )
{
bsearch app = new bsearch();
app.addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
}
VERI YAPILARI (Gz 2002-2003) Java`da Hazir Vcri YapiIari vc KoIcksiyonIar
Y. Do. Dr. Aybars UGUR 83



ekil 1 :
Dizi siralandiktan (sort metodu ile) sonra
1,2,4,6,7,8,9,11,15
iinde (binarySearch metodu ile) 4 degeri
aranmaktadir.
Dizi iindeki konumu (2) metin kutusuna yazdirilir.






























VERI YAPILARI (Gz 2002-2003) Java`da Hazir Vcri YapiIari vc KoIcksiyonIar
Y. Do. Dr. Aybars UGUR 84
JAVA RNEK (SortedSetTest.java) : Aga

import java.util.*;

public class SortedSetTest {
private static String names[] = { "yellow","green",
"black","tan","grey","white","orange","red","green"
};

public SortedSetTest()
{
TreeSet m = new TreeSet(Arrays.asList(names));
System.out.println("Set: ");
printSet(m);

System.out.print("orange'dan ncekiler :");
printSet(m.headSet("orange"));
System.out.print("orange'dan sonrakiler:");
printSet(m.tailSet("orange"));

System.out.println("lk eleman :"+m.first());
System.out.println("Son eleman :"+m.last());
}

public void printSet(SortedSet setRef)
{
Iterator i = setRef.iterator();
while(i.hasNext())
System.out.print(i.next()+" ");
System.out.println();
}

public static void main(String args[])
{ new SortedSetTest(); }

}

Ekran iktisi :
Set:
black green grey orange red tan white yellow
orange'dan ncekiler :black green grey
orange'dan sonrakiler:orange red tan white yellow
lk eleman :black
Son eleman :yellow

You might also like