PHP ile İleri Konular, Bağlı Liste Oluşturma
Bilgisayar Mühendisliğinde Veri Yapıları (Data Structures) dersi alanlar bilir, Veri Yapılarında Bağlı Listeler (Link List) en önemli konulardan biridir. Genelde bu konuyu C++ programlama dili ile anlatırlar, başka programlama dillerinde de hazır fonksiyonlar vardır. C# ve Java içinde Bağlı Listeler için özel fonksiyonlar vardır, PHP hiç geri kalır mı? PHP içinde de Bağlı Listeler ile ilgili SplDoublyLinkedList() fonksiyonu var.
Aşağıdaki örnekte basit bir bağlı liste var, verinin tutulduğu bir veri hücresi var ve her hücreden sonra hangi hücrenin geleceği bilgisini tutan bir gösterici hücre bölümü var. Bu ikisine birden düğüm (node) adını veriyoruz. Bu bölümde çok fazla Veri Yapıları anlatmayacağım, zira geniş bir konu.
İşin mantığını anlamanız için Kaynaklar bölümündeki Türkçe Bağlı Liste anlatımını izleyebilir, sonra kodlara göz atabilirsiniz.
Aşağıdaki örnekte basit bir bağlı liste var, verinin tutulduğu bir veri hücresi var ve her hücreden sonra hangi hücrenin geleceği bilgisini tutan bir gösterici hücre bölümü var. Bu ikisine birden düğüm (node) adını veriyoruz. Bu bölümde çok fazla Veri Yapıları anlatmayacağım, zira geniş bir konu.
İşin mantığını anlamanız için Kaynaklar bölümündeki Türkçe Bağlı Liste anlatımını izleyebilir, sonra kodlara göz atabilirsiniz.
Biz şimdi kendi Bağlı Listemizi oluşturacağız.
<?php
class DugumListele
{
public $veri;
public $sonraki;
function __construct($veri)
{
$this->veri = $veri;
$this->sonraki = NULL;
}
function dugumOku()
{
return $this->veri;
}
}
class BagliListe
{
private $ilkDugum;
private $sonDugum;
private $sayac;
function __construct()
{
$this->ilkDugum = NULL;
$this->sonDugum = NULL;
$this->sayac = 0;
}
//BagliListe'ye ilk düğüm ekle
public function ilkDugumEkle($veri)
{
$link = new DugumListele($veri);
$link->sonraki = $this->ilkDugum;
$this->ilkDugum = &$link;
/* Eğer ilk düğümse ve başka düğüm yoksa son düğüm olarak da ilk düğümü gösterilir. */
if($this->sonDugum == NULL)
$this->sonDugum = &$link;
$this->sayac++;
}
//BagliListe'deki tüm düğümler listeleniyor
public function dugumOku()
{
$listveri = array();
$aktifDugum = $this->ilkDugum;
while($aktifDugum != NULL)
{
array_push($listveri, $aktifDugum->dugumOku());
$aktifDugum = $aktifDugum->sonraki;
}
foreach($listveri as $v){
echo $v."<br>";
}
}
//BagliListe'deki tüm düğümler ters çevriliyor.
public function tersCevir()
{
if($this->ilkDugum != NULL)
{
if($this->ilkDugum->sonraki != NULL)
{
$aktifDugum = $this->ilkDugum;
$yeni = NULL;
while ($aktifDugum != NULL)
{
$gecici = $aktifDugum->sonraki;
$aktifDugum->sonraki = $yeni;
$yeni = $aktifDugum;
$aktifDugum = $gecici;
}
$this->ilkDugum = $yeni;
}
}
}
//anahtar(key) değere göre istenilen düğümü siler
public function dugumSil($key)
{
$aktifDugum = $this->ilkDugum;
$onceki = $this->ilkDugum;
while($aktifDugum->veri != $key)
{
if($aktifDugum->sonraki == NULL)
return NULL;
else
{
$onceki = $aktifDugum;
$aktifDugum = $aktifDugum->sonraki;
}
}
if($aktifDugum == $this->ilkDugum)
{
if($this->sayac == 1)
{
$this->sonDugum = $this->ilkDugum;
}
$this->ilkDugum = $this->ilkDugum->sonraki;
}
else
{
if($this->sonDugum == $aktifDugum)
{
$this->sonDugum = $onceki;
}
$onceki->sonraki = $aktifDugum->sonraki;
}
$this->sayac--;
}
//Bağlı Listeyi tamamen boşaltır
public function emptyList()
{
$this->ilkDugum == NULL;
}
//Bağlı Listemizde verilen key(sıra) değerine göre araya eleman ekler.
public function arayaEkle($YeniGelen,$key){
if($key == 0){
$this->ilkDugumEkle($YeniGelen);
}
else{
$link = new DugumListele($YeniGelen);
$aktifDugum = $this->ilkDugum;
$onceki = $this->ilkDugum;
for($i=0;$i<$key;$i++)
{
$onceki = $aktifDugum;
$aktifDugum = $aktifDugum->sonraki;
}
$onceki->sonraki = $link;
$link->sonraki = $aktifDugum;
$this->sayac++;
}
}
}
/* Yeni bağlı liste oluşturuluyor */
$nesne = new BagliListe();
/* Listeye ilk olarak Elazig ili ekleniyor */
$vilayet="Elazig";
$nesne->ilkDugumEkle($vilayet);
$nesne->dugumOku();
echo "<br><br>";
/* Sonra Ankara ili ekleniyor */
$key=1;
$vilayet="Ankara";
$nesne->arayaEkle($vilayet,$key);
$nesne->dugumOku();
echo "<br><br>";
/* Sonra Gaziantep ili ekleniyor */
$key=2;
$vilayet="Gaziantep";
$nesne->arayaEkle($vilayet,$key);
$nesne->dugumOku();
echo "<br><br>";
/* Elazig ile Ankara arasına Kars ekleniyor */
$key=1;
$vilayet="Kars";
$nesne->arayaEkle($vilayet,$key);
$nesne->dugumOku();
echo "<br><br>";
/* Listeden Ankara İli siliniyor */
$vilayet="Ankara";
$nesne->dugumSil($vilayet);
$nesne->dugumOku();
echo "<br><br>";
Çalışan halini aşağıdaki linke tıklayarak görebilirsiniz.
ONLİNE DEMO
KAYNAKLAR
1) Bağlı Liste Anlatımı, http://www.youtube.com/watch?v=-5y2ArGzX-I
2) Data Structures and Algorithm Analysis in Java, Mark WEISS, Addison Wesley
3) http://www.stoimen.com/blog/2012/07/24/php-arrays-or-linked-lists/
4) http://www.codediesel.com/php/linked-list-in-php/
5) http://learnprogramming.machinesentience.com/
6) http://code.activestate.com/recipes/576498-implementation-of-a-single-linked-list-in-php/
İyi çalışmalar,
Oğuzhan TAŞ
Ocak - 2015
Çalışan halini aşağıdaki linke tıklayarak görebilirsiniz.
ONLİNE DEMO
KAYNAKLAR
1) Bağlı Liste Anlatımı, http://www.youtube.com/watch?v=-5y2ArGzX-I
2) Data Structures and Algorithm Analysis in Java, Mark WEISS, Addison Wesley
3) http://www.stoimen.com/blog/2012/07/24/php-arrays-or-linked-lists/
4) http://www.codediesel.com/php/linked-list-in-php/
5) http://learnprogramming.machinesentience.com/
6) http://code.activestate.com/recipes/576498-implementation-of-a-single-linked-list-in-php/
İyi çalışmalar,
Oğuzhan TAŞ
Ocak - 2015
Dil Değiştir(Change Language)
Kategoriler
- Csharp(58)
- Csharp Formlar(23)
- Web Tasarım(9)
- CSS(27)
- JavaScript(37)
- PHP(50)
- Laravel(3)
- ASP.net(38)
- Excel(15)
- Güvenlik(4)
- E-Ticaret(3)
- Kariyer(5)
- SQL Server(29)
- MySQL(16)
- Linux(17)
- MacOSX(8)
- Ayarlar(12)
- Bilgisayar Ağları(3)
- Symfony(1)
- Teknoloji(7)
- VBS(1)
- Arduino(6)
- RaspberryPi(1)
- Algoritmalar(15)
- HTML(3)
- Python(2)
- Bash Script(6)
- C Programlama(10)
- Flutter - Dart(11)
- Bootstrap(1)
En çok Okunan 18 Makale
- :: Excelde EĞER Fonksiyonu Kullanımı...
- :: Csharp ile Access Veritabanı Bağlan...
- :: SQL nedir, Temel SQL Komutları nele...
- :: Hangi Linux Dağıtımı?
- :: OSX İşletim Sistemine PHP, MySQL, A...
- :: PHP dilini kullanarak MySQLi tekniğ...
- :: Excel Hesap tablosunda EĞERSAY Fonk...
- :: Excel Hesap tablosunda ÇOKETOPLA Fo...
- :: Excel Hesap tablosunda ETOPLA Fonks...
- :: Excel Hesap tablosunda ÇOKEĞERSAY F...
- :: Mac Bilgisayarınıza Windows 7 Yükle...
- :: Hangi Programlama Dilini Öğrenmeliy...
- :: PHP ile Basit Dosya Yükleme
- :: PHP Dili kullanarak MySQLi Tekniği ...
- :: C# Programlama Dili ile İlgili Örne...
- :: PhpMyAdmin Şifresi Nasıl Değiştiril...
- :: Hangisi acaba, PHP mi ASP.NET mi ?
- :: PHP ile MySQL veritabanına MySQLi t...