יום רביעי, 24 בינואר 2018

רשימה ג'נרית ב-#C

מימוש רשימה ג'נרית ב-#C

בדומה לרשימה המקושרת הפשוטה עליה למדנו, גם רשימה ג'נרית כבר קיימת כחלק מהשפה ואנחנו לא צריכים לממש אותה.
בכל זאת, למטרות לימוד נדגים מימוש אפשרי.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication103
{
    class Node<T> // "המחלקה "צומת
    {
        private T info;
        private Node<T> next;
 
        public Node(T info)
        {
            this.info = info;
            this.next = null;
        }
 
        public Node(T info, Node<T> next)
        {
            this.info = info;
            this.next = next;
        }
 
        public T GetInfo()
        {
            return info;
        }
 
        public Node<T> GetNext()
        {
            return next;
        }
 
        public void SetInfo(T info)
        {
            this.info = info;
        }
 
        public void SetNext(Node<T> next)
        {
            this.next = next;
        }
 
        public override string ToString()
        {
            return info.ToString();
        }
    }
 
    class List<T>
    {
        private Node<T> first;
 
        public List()
        {
            first = null;
        }
 
        public Node<T> GetFirst()
        {
            return first;
        }
 
        public Node<T> Insert(Node<T> p, T x)
        {
            Node<T> temp = new Node<T>(x);
            if (p == null)
            {
                temp.SetNext(first);
                first = temp;
            }
            else
            {
                temp.SetNext(p.GetNext());
                p.SetNext(temp);
            }
            return temp;
        }
 
        public Node<T> Remove(Node<T> p)
        {
            if (first == p)
                first = first.GetNext();
            else
            {
                Node<T> prev = first;
                while (prev.GetNext() != null && prev.GetNext() != p)
                    prev = prev.GetNext();
                prev.SetNext(p.GetNext());
            }
            Node<T> NextP = p.GetNext();
            p.SetNext(null);
            return NextP;
        }
 
        public bool IsEmpty()
        {
            return first == null;
        }
 
        public override string ToString()
        {
            string str = "[";
            Node<T> p = first;
            while (p != null)
            {
                str = str + p.GetInfo().ToString();
                if (p.GetNext() != null)
                    str = str + " , ";
                else
                    str = str + "]";
                p = p.GetNext();
            }
            return str;
        }
    }
 
    class Program
    {
        public static List<int> CreateList()
        {
            List<int> L = new List<int>();
            Node<int> tail = null;
 
            int x;
            while (true)
            {
                Console.WriteLine("Enter info , (-1 to finish): ");
                x = Convert.ToInt32(Console.ReadLine());
                if (x == -1)
                    break;
                tail = L.Insert(tail, x);
            }
            return L;
        }
 
        static void Main(string[] args)
        {
            List<int> L = CreateList();
            Node<int> p;
 
            p = L.GetFirst();
            while (p != null)
            {
                Console.WriteLine(p.GetInfo());
                p = p.GetNext();
            }
        }
 
    }
}







על שימוש נכון ברשימות המובנות של השפה תוכלו לקרוא בהרחבה בקישור הזה.


אין תגובות:

הוסף רשומת תגובה