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