Düğüm Sınıfı
using System;
//SOFTSAM
namespace Bagliliste
{
class node // düğüm sınıfı her bir düğümde tutlması gereken verilerimizi barındıracak
{
private int data;// verilerimizi tutacak bir tamsayı değişkeni
private node next;//bir sonraki düğümü bilmemiz gereken durumlara karşı ve düğümleri birbirine bağlamak için kullanılacak veri
private node previous;//bir önceki düğümü bilmemiz gereken durumlara karşı ve düğümleri birbirine bağlamak için kullanılacak veri
//data değişkenimizi doldurmak için bir constructer oluşturduk
public node(int data)
{
this.data = data;
}
//Değişkenlerimize direk ulaşmalarını engellemek adına verilerimizi properties haline getirdik
#region Properties
public node Previous
{
get { return previous; }
set { previous = value; }
}
public int Data { set { this.data = value; } get { return data; } }
public node Next { get { return next; } set { this.next = value; } }
#endregion
}
}
Bağlı Liste Sınıfı
using System;
//SOFTSAM
namespace Bagliliste
{
class MyLinkedList
{
public node first { get; set; } // dizimizin ilk elemanını bilmeliyiz ki işlemlerimizi yapmaya başlayacağımız bir referans noktamız olsun
public node last { get; set; }//dizimizin son elemanını da sondan ekleme yada çıkrma yaparken işlemin O(1) de gerçekleşmesi için tutuyoruz
//Ekleme işlemlerini Gerçekleştireceğimiz metodlar
#region SOFTSAMAdditionintoLinkedList
public void push_back(int data)//sondan ekleme işlemi
{
node new_node = new node(data);//yeni bir veri demek yeni bir düğüm demek
new_node.Next = null;//sondaki veri olduğu için bundan sonra veri olmayacağı için null yaptık
if (first == null)// ilk veri boş ise yani dizi boş ise verinin dizinin ilk elemanı olduğunu bilmeliyiz
{
first = new_node;
first.Previous = null;//ilk elemandan öncesi olmayacak dizilerde 0. indisten öncesi yoktur gibi bir mantıkla düşünebiliriz
last = new_node;//bu düğüm baş olamkla birlikte tek düğüm olduğundan son elemandırda int[] a={1}; tanımlamasında 1 elemanının hem ilk hem son olması gibi
}
else //null değilse bu elemandan önce eleman var demektir
{
last.Next = new_node;
new_node.Previous = last;
last = new_node;
}
}
public void push_front(int data)//önden ekleme
{
node new_node = new node(data);
if (first == null)//dizi boş ise buradaki işlemler yapılacak
{
first = new_node;
last = null;
}
else // boş değilse
{
first.Previous = new_node;// ilk elemanım artık değişecek ve yeni gelen eleman olacak
new_node.Next = first;//ve bir sonraki eleman artık önceki ilk eleman oldu örneğimizden devam edersek int[] a={1}; 1 ilk elemandı
//biz int[] a={0,1}; şeklinde ilk sıraya eleman eklersek 1 in 0 dan sonra geldiğini görürüz
new_node.Previous = null;
first = new_node;
}
}
public void push_to(int data)// listeye küçükten büyüğe doğru sıralama şeklinde veri ekler
{
node new_node = new node(data);
node t = first;
while (t != null && t.Data < new_node.Data) // arama işlemi yapılacak ve bulunmazsa t değeri null dönecek bunu da kontrol altına aldık
t = t.Next;
if (t == null)// bulamadığı için veri en sona eklenecek
push_back(data);
else if (t.Previous == null && t.Data > new_node.Data)//en başta olması durumunda veri başa eklenecek
{
push_front(data);
}
else //aksi halde veri aralara ekelencektir
{
new_node.Previous = t.Previous; // düğümler arası bağlantılar sağlanıyor
new_node.Next = t;
t.Previous.Next = new_node;
t.Previous = new_node;
}
}
#endregion
#region SOFTSAMRemoveDataFromLinkedList
public void pop() // sondaki veriyi listeden atmak için
{
last = last.Previous;// sondaki veri artık sonun bir öncesi olmalı int[] a={1,2,3}; ifadesinde 3 ü görmezden gelmesini sağlamak için
last.Next = null;//sonrasında veri olmadığına inandırmalıyız
}
public void remove_first()//en baştaki veriyi listeden atmak için
{
first = first.Next;
first.Previous = null;
}
public int remove_data(int data)//silmek istediğimiz datayı belirtip silinen veri sayısını döndürüyoruz ilk veriyi bulup sildiğinde çıkacaktır
{
node t = first;
while ( t != null && t.Data != data) //arama işlemi
t = t.Next;
if (t == null)
return 0;
if (t.Previous == null) remove_first();
else if (t.Next == null) pop();
else
{
t.Next.Previous = t.Previous;//arada ise silme işlemi
t.Previous.Next = t.Next;
}
return 1;
}
#endregion
public void printLinkedList()
{
node t = first;
while (t != null)
{
Console.WriteLine(t.Data);
t = t.Next;
}
}
}
}
Program.cs Main Metodu
using System;
//SOFTSAM
namespace Bagliliste
{
class Program
{
static void Main(string[] args)
{
int a = 5, b = 6, c = 7;
MyLinkedList mls=new MyLinkedList();
mls.push_back(a);
mls.push_back(b);
mls.push_back(c);
mls.printLinkedList();
Console.WriteLine("\n\n\n");
mls.push_front(11);
mls.push_front(1);
mls.push_to(10);
mls.pop();
mls.remove_first();
mls.remove_data(10);
mls.printLinkedList();
Console.ReadKey();
}
}
}
Hiç yorum yok:
Yorum Gönder