Bölüm 4. Kuyruk - Olcay Taner Yildiz Home Page

advertisement
Bölüm 4. Kuyruk
Olcay Taner Yıldız
2014
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
1 / 22
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
Sabit Dizi ile Kuyruk Tanımı
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
2 / 22
Tam sayılar içeren sabit dizi ile bir kuyruk
uygulaması
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Kuyruk{
Ornek dizi [];
int bas;
int son;
int N;
public Kuyruk(int N){
dizi = new Ornek[N];
this.N = N;
bas = 0;
son = 0;
}
boolean kuyrukDolu(){
if (bas == (son + 1) % N)
return true;
else
return false;
}
boolean kuyrukBos(){
if (bas == son)
return true;
else
return false;
}
}
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
3 / 22
Azami 12 eleman alabilen bir kuyruk yapısı
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
15
baş
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
6
9
8
4
son
4 / 22
Önceki şekilde verilen kuyruk yapısına 17
ve 3 elemanlarının eklenmesi
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
3
son
15
6
9
8
4
17
baş
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
5 / 22
Sabit dizi ile uygulanan bir kuyruğa yeni bir
eleman ekleyen algoritma
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
1
2
3
4
5
6
void kuyrugaEkle(Ornek yeni){
if (!kuyrukDolu()){
dizi [son] = yeni;
son = (son + 1) % N;
}
}
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
6 / 22
Önceki şekilde verilen kuyruk yapısından
15’in silinmesi
Sabit Dizi ile Kuyruk
Tanımı
15
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
baş
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
6
9
8
4
son
7 / 22
Sabit dizi ile uygulanmış bir kuyruktan
eleman silen ve o elemanı döndüren
algoritma
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
1
2
3
4
5
6
7
8
9
Ornek kuyrukSil(){
Ornek sonuc;
if (!kuyrukBos()){
sonuc = dizi [bas];
bas = (bas + 1) % N;
return sonuc;
}
return null;
}
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
8 / 22
Kuyruk İşlemleri (Dizi)
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Ekleme: O(1)
● Silme: O(1)
●
Uygulama: Hedef
Tahtası
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
9 / 22
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
Bağlı Liste ile Kuyruk Tanımı
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
10 / 22
Tam sayılar içeren bağlı liste ile bir kuyruk
uygulaması
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Kuyruk{
Eleman bas;
Eleman son;
public Kuyruk(){
bas = null;
son = null;
}
boolean kuyrukBos(){
if (bas == NULL)
return true;
else
return false;
}
}
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
11 / 22
5 eleman içeren ve bağlı liste ile
tanımlanmış kuyruk yapısı
Sabit Dizi ile Kuyruk
Tanımı
15
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
6
baş
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
9
8
4
son
12 / 22
Önceki şekilde verilen kuyruk yapısına
17’nin eklenmesi
Sabit Dizi ile Kuyruk
Tanımı
15
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
6
9
baş
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
8
4
17
son
13 / 22
Bağlı liste ile uygulanan bir kuyruğa yeni
bir eleman ekleyen algoritma
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
1
2
3
4
5
6
7
void kuyrugaEkle(Eleman yeni){
if (!kuyrukBos())
son. ileri = yeni;
else
bas = yeni;
son = yeni;
}
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
14 / 22
Önceki şekilde verilen kuyruk yapısından
15’in silinmesi
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
15
Uygulama: Hedef
Tahtası
6
9
baş
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
8
4
son
15 / 22
Bağlı liste ile uygulanmış bir kuyruktan
eleman silen ve o elemanı döndüren
algoritma
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
1
2
3
4
5
6
7
8
9
10
Eleman kuyrukSil(){
Eleman sonuc;
sonuc = bas;
if (!kuyrukBos()){
bas = bas. ileri ;
if (bas == null)
son = null;
}
return sonuc;
}
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
16 / 22
Kuyruk İşlemleri (Bağlı Liste)
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Ekleme: O(1)
● Silme: O(1)
●
Uygulama: Hedef
Tahtası
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
17 / 22
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
Uygulama: Hedef Tahtası
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
18 / 22
Örnek bir hedef tahtası ve yapılan 5 atışta
100 elde edilmesi
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
36
33
27
21
36
33
27
21
11
11
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
19 / 22
Hedef tahtası probleminde geniş arama
yönteminin iki aşamasının uygulanması
0
11
21
27
33
36
22 32 38 44 47 32 42 48 54 57 38 48 54 60 63 44 54 60 66 69 47 57 63 69 72
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
20 / 22
Hedef tahtası probleminde bir durumun
tanımı
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
1
2
3
4
5
6
7
8
9
10
public class Eleman{
int toplam;
String atis ;
Eleman ileri ;
public Eleman(int toplam, String atis){
this.toplam = toplam;
this.atis = atis ;
ileri = null;
}
}
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
21 / 22
Hedef tahtası probleminin geniş arama
yöntemiyle çözümü
Sabit Dizi ile Kuyruk
Tanımı
Bağlı Liste ile
Kuyruk Tanımı
Uygulama: Hedef
Tahtası
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
String hedefTahtasi(int[] tahta){
int i, t ;
String a;
Eleman e;
Kuyruk k;
e = new Eleman(0, "");
k = new Kuyruk();
k.kuyrugaEkle(e);
while (!k.kuyrukBos()){
e = k.kuyrukSil ();
if (e.toplam == 100)
return e.atis;
for (i = 0; i < tahta.length; i ++){
if (e.toplam + tahta[ i ] <=100){
t = e.toplam + tahta[ i ];
a = e. atis + " " + tahta[ i ];
e = new Eleman(t, a);
k.kuyrugaEkle(e);
}
}
}
return null;
}
O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, 2013
22 / 22
Download