Obecny czas: 2010-09-06, 18:45
Zaloguj się

[C#]Implementacja listy

Jak w nazwie... Wszystko o programowaniu pod tę platformę. Programowanie.

Moderatorzy: J.Admin, ModTeam

Postprzez gotan06 » 2010-03-04, 23:02

Mam problem z utworzeniem listy implementującej metody Push i Pop w C#. Wiem, że są specjalne klasy, np. LinkedList, ale nie mogę z tego skorzystać. W C++ do tworzenia takich list używało się wskaźników, w C# z tego co wiem trzeba użyć referencji, tylko za bardzo nie wiem jak to zrobić, także mam nadzieję, że ktoś pomoże :)
gotan06
 
Posty: 19
Rejestracja: 2008-01-14, 16:25

Postprzez pejs » 2010-03-05, 10:29

Prosty przykład:
Kod: Zaznacz wszystko
using System;
namespace MyListExample
{
   public class MyList<T>
   {
      private Element<T> _head;
      private Element<T> _tail;

      public void Push(T elem)
      {
         if (_head == null)
         {
            _head = new Element<T> { Value = elem };
            _head.Next = _head.Previous = null;
            _tail = _head;
         }
         else
         {
            _tail.Next = new Element<T> { Value = elem };
            _tail.Next.Previous = _tail;
            _tail = _tail.Next;
         }
      }
      public T Pop()
      {
         if (_tail == null)
            throw new ListEmptyException();
         T v = _tail.Value;
         _tail = _tail.Previous;
         return v;
      }
   }
   public class ListEmptyException: Exception
   {
      public ListEmptyException()
         : base()
      {
      }
   }
   public class Element<T>
   {
      public T Value
      {
         get;
         set;
      }
      public Element<T> Next
      {
         get;
         set;
      }
      public Element<T> Previous
      {
         get;
         set;
      }
   }
}


i wykorzystanie:

Kod: Zaznacz wszystko
using System;

namespace MyListExample
{
   class Program
   {
      static void Main(string[] args)
      {
         MyList<int> l = new MyList<int>();
         int v;
         try
         {
            v = l.Pop();
         }
         catch
         {
            Console.WriteLine("List empty");
         }
         l.Push(3);
         l.Push(2);
         l.Push(1);
         for (int i = 0; i < 4; i++)
         {
            try
            {
               v = l.Pop();
               Console.WriteLine(v);
            }
            catch
            {
               Console.WriteLine("List empty");
            }
         }
         Console.ReadKey();
      }
   }
}
You know who you are, don't betray yourself.
Awatar użytkownika
pejs
 
Posty: 2048
Rejestracja: 2006-03-22, 20:03
Miejscowość: Gdańsk

Postprzez gotan06 » 2010-03-27, 21:24

Spóźnione podziękowania za odpowiedź :)
Przy okazji pisania nowego tematu zauważyłem, że nie podziękowałem a Twój kod mi się naprawdę przydał ;)
gotan06
 
Posty: 19
Rejestracja: 2008-01-14, 16:25


Wróć do .NET

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 1 gość

cron

Kto jest na forum

Na forum jest 1 użytkownik :: 0 zarejestrowanych, 0 ukrytych i 1 gości (oparte na użytkownikach aktywnych przez ostatnie 5 minut)
Najwięcej użytkowników (140) było obecnych 2007-12-12, 06:19

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 1 gość

Login Form