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(7)
- 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...
- :: Excel Hesap tablosunda EĞERSAY Fonk...
- :: PHP dilini kullanarak MySQLi tekniğ...
- :: Excel Hesap tablosunda ÇOKETOPLA Fo...
- :: Excel Hesap tablosunda ETOPLA Fonks...
- :: Excel Hesap tablosunda ÇOKEĞERSAY F...
- :: Hangi Programlama Dilini Öğrenmeliy...
- :: Mac Bilgisayarınıza Windows 7 Yükle...
- :: PHP ile Basit Dosya Yükleme
- :: Excel hücrelerinde yıldız koyarak b...
- :: C# Programlama Dili ile İlgili Örne...
- :: PHP Dili kullanarak MySQLi Tekniği ...
- :: PhpMyAdmin Şifresi Nasıl Değiştiril...
- :: Hangisi acaba, PHP mi ASP.NET mi ?