Skip to content

Instantly share code, notes, and snippets.

Created April 23, 2017 22:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/dd02a155fd62a61ab0379cba04377cf8 to your computer and use it in GitHub Desktop.
Save anonymous/dd02a155fd62a61ab0379cba04377cf8 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//к сожалению в структурах запрещены циклические ссылки, но ими никто в c# не пользуется
//имена классов и членов с большой буквы (так принято)
class Element
{
//не данные, а свойства (так принято)
//но если не нужно, можно убрать '{ get; set; }'
public char A;
public Element Next;
};
class List
{
//нельзя как в c++ писать 'public:', вы должны перед каждым методом писать 'public'
//private - по умолчанию, его можно не писать
//конструктор
public List()
{
Head = null;
Count = 0;
}
//деструкторов в c# нет: тут автоматическая сборка мусора
//~list();
/// <summary>
/// Коментарии в таком прикольном виде пишем
/// Добавление элемента в список
/// </summary>
/// <param name="c">данные</param>
public void Add(char c)
{
if (Head == null)
{
Head = new Element();
Head.A = c;
Head.Next = null;
Count = 1;
}
else
{
Element h = new Element();
h.A = c;
h.Next = Head;
Head = h;
Count++;
}
}
//не могу написать оператор, вместо него будет функция
//public explicit List(char c)
public void CreateFromChar(char c)
{
}
//оказывается все операторы должны быть статические, так что добавляем List в первый аргумент
//вроде не ругается, но я бы через функцию сделал
public static List operator +(List l, char c)
{
l.Add(c);
return null;
}
public static List operator --(List l)
{
if (l.Head.Next == null)
{
Element h = new Element();
h = l.Head;
l.Head = h.Next;
//Delete h;
l.Count--;
}
else Console.WriteLine("List is Empty!");
return null;
}
public static bool operator ==(List l1, List l2)
{
if ((l1.Head.Next == null) || (l2.Head.Next == null)) Console.WriteLine("Some List is Empty!");
else
{
if (l1.Count == l2.Count) return true;
else return false;
}
return false;
}
//оператор '==' должен быть вместе с '!='
public static bool operator !=(List l1, List l2)
{
return true;
}
//эти два метода тоже придется реализовать, иначе на '==' ругается
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public void Print()
{
if (Head==null) Console.WriteLine("List is Empty!");
else
{
Element h = new Element();
Element t = new Element();
h = Head;
do
{
Console.WriteLine(h.A+" ");
t = h.Next;
h = t;
} while (h!=null);
//Console.WriteLine(h.A+"\n");
}
}
//приватные члены, можем ключевое слово 'private' опустить
//опять же оформил как свойства, но можем и как обычные данные сделать
Element Head { get; set; }
int Count { get; set; }
}
class Program
{
static void Main(string[] args)
{
List ch1 = new List();
List ch2 = new List();
List ch3 = new List();
List ch4 = new List();
ch1.Add('a');
ch2.Add('c');
ch1.Print();
ch2.Print();
ch3 = ch1 + 'b';
ch4 = ch2 + 'd';
ch1.Print();
ch2.Print();
if (ch3 == ch4) Console.WriteLine("Are equal\n");
else Console.WriteLine("Not equal\n");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment