Найти среднее арифметическое информационного поля односвязного линейного списка - C#
Формулировка задачи:
Дан односвязный линейный список, информационное поле которого целое число, найти среднее арифметическое этого списка.
Сказли можно в консольном приложении сделать. Выручайте, пожалуйста
Решение задачи: «Найти среднее арифметическое информационного поля односвязного линейного списка»
textual
Листинг программы
class Program
{
static void Main(string[] args) {
Console.WriteLine($"Среднее арифметическое списка: {OneWayLinkedListElement<int>.MakeList(100, 100500, 300, 5).Average()}");
Console.ReadKey();
}
}
public class OneWayLinkedListElement<T> : IEnumerable<T>
{
// Следующий элемент
public OneWayLinkedListElement<T> NextElement { get; set; }
// Информационное поле (ну и название блин)
public T Data { get; set; }
#region IEnumerable<T>, IEnumerable
public IEnumerator<T> GetEnumerator() {
yield return Data;
var currentElement = NextElement;
while (currentElement != null)
{
yield return currentElement.Data;
currentElement = currentElement.NextElement;
}
}
IEnumerator IEnumerable.GetEnumerator()
=> GetEnumerator();
#endregion
// Создать односвязанный список и вернуть его корень
public static OneWayLinkedListElement<T> MakeList(params T[] dataCollection)
=> MakeList(dataCollection as IEnumerable<T>);
// Создать односвязанный список и вернуть его корень
public static OneWayLinkedListElement<T> MakeList(IEnumerable<T> dataCollection) {
if (dataCollection == null)
return null;
OneWayLinkedListElement<T> root = null;
OneWayLinkedListElement<T> previous = null;
foreach (var data in dataCollection) {
var currentElement = new OneWayLinkedListElement<T>() { Data = data };
if (previous != null)
previous.NextElement = currentElement;
else
root = currentElement;
previous = currentElement;
}
return root;
}
}