.NET 4.x Двусвязный список - C#
Формулировка задачи:
Вот задание:
1. Считать из текстового файла исходные данные и на их основе создать необходимые объекты.
2. Разместить объекты в контейнере.
Языки программирования
Общее свойство: год разработки – короткое целое
1. Процедурные (наличие, отсутствие абстрактных типов данных – булевская величина)
2. Объектно-ориентированные (наследование: одинарное, множественное, интерфейса – перечислимый тип)
3. Функциональные языки (типизация – перечислимый тип = строгая, динамическая; поддержка «ленивых» вычислений – булевский тип)
Я имею представление,что такое двусвязный список, но написать его не знаю как.
Вот только что я смог сделать:
Я вроде как понял,что нужно создать еще класс и там "впихнуть" объекты в двусвязный список...но как именно это делается, не могу понять.
P.S.: Текстовый файл во вложении
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace text { class Program { static void Main(string[] args) { //string[] lines = File.ReadAllLines(@"..\..\TextFile1.txt", Encoding.Default); // чтение текстового файла //foreach (string s in lines) //{ // string[] data = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // разделитель //} Console.ReadKey(); } } class Proc : Base // класс процедурных языков { bool Atd; // наличие АТД public Proc(short age, bool Atd) { this.age = age; this.Atd = Atd; } public override string F() { return "Процедурный язык. Год: " + age + " АТД: " + Atd; } } enum legacy { одинарное, множественное, интерфейс } class Obj : Base // класс объектно=ориентированных языков { legacy d; //наследование public Obj(short age, legacy d) { this.age = age; this.d = d; } public override string F() { return "Объектный. Год: " + age + "Наследование: " + d; } } enum tip { строгая, динамическая } class Func : Base // класс функциональных языков { tip t; // типизация bool lazy; //поддержка "ленивых" вычислений public Func(short age, tip t, bool lazy) { this.age = age; this.t = t; this.lazy = lazy; } public override string F() { return "Функциональные. Год: " + age + "Типизация: " + t + "Леннивость: " + lazy; } } abstract public class Base // главный класс (объединяет все) { public abstract string F(); // абстрактная функция public short age { get; set; } // общее свойство(год разработки) } }
Решение задачи: «.NET 4.x Двусвязный список»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace text { class Spisok { class Node { public Base data; public Node next; }; Node first; Node last; int R = 0; public void Print() { Console.Write("Содержимое: \n"); for (Node cur = first; cur != null; cur = cur.next) { Console.WriteLine(cur.data.F()); } Console.WriteLine(); } public void Addi(Base value) { Node tmp = new Node(); tmp.data = value; tmp.next = null; if (first == null) { first = tmp; last = tmp; } else { last.next = tmp; last = tmp; } R++; } public void Remove() { if (first != null) { first = first.next; if (first == null) { last = null; } } R--; } public Base this[int i] { get { for (Node cur = first; cur != null; cur = cur.next, i--) { if (i == 0) { return cur.data; } } return null; } set { for (Node cur = first; cur != null; cur = cur.next, i--) { if (i == 0) { cur.data = value; } } } } public static void ReadFile(Spisok sp) { List<Base> s = new List<Base>(); try { StreamReader file = new StreamReader(@"..\..\TextFile1.txt", Encoding.Default); while (!file.EndOfStream) { string[] data = file.ReadLine().Split(' '); if (data[0] == "Proc") { sp.Addi(new Proc(Convert.ToInt16(data[1]), Convert.ToBoolean(data[2]))); } else if (data[0] == "Obj") { if (data[2] == "одинарное") { sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.одинарное)); } if (data[2] == "множественное") { sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.множественное)); } if (data[2] == "интерфейс") { sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.интерфейс)); } } else if (data[0] == "Func") { if (data[2] == "строгая") { sp.Addi(new Func(Convert.ToInt16(data[1]), tip.строгая, Convert.ToBoolean(data[3]))); } if (data[2] == "динамическая") { sp.Addi(new Func(Convert.ToInt16(data[1]), tip.динамическая, Convert.ToBoolean(data[3]))); } } } } catch(Exception e) { Console.WriteLine("Ошибка: " + e.Message); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д