.NET 4.x Двусвязный список - C#

Узнай цену своей работы

Формулировка задачи:

Вот задание: 1. Считать из текстового файла исходные данные и на их основе создать необходимые объекты. 2. Разместить объекты в контейнере. Языки программирования Общее свойство: год разработки – короткое целое 1. Процедурные (наличие, отсутствие абстрактных типов данных – булевская величина) 2. Объектно-ориентированные (наследование: одинарное, множественное, интерфейса – перечислимый тип) 3. Функциональные языки (типизация – перечислимый тип = строгая, динамическая; поддержка «ленивых» вычислений – булевский тип) Я имею представление,что такое двусвязный список, но написать его не знаю как. Вот только что я смог сделать:
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; } // общее свойство(год разработки)
    } 
}
Я вроде как понял,что нужно создать еще класс и там "впихнуть" объекты в двусвязный список...но как именно это делается, не могу понять. P.S.: Текстовый файл во вложении

Решение задачи: «.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);
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы