Двусвязный Список

Тема в разделе ".NET", создана пользователем b0006, 14 ноя 2014.

  1. b0006

    b0006 New Member

    Регистрация:
    17 дек 2013
    Сообщения:
    2
    Симпатии:
    0
    Вот задание:
    1. Считать из текстового файла исходные данные и на их основе создать необходимые объекты.
    2. Разместить объекты в контейнере.

    Языки программирования
    Общее свойство: год разработки – короткое целое
    1. Процедурные (наличие, отсутствие абстрактных типов данных – булевская величина)
    2. Объектно-ориентированные (наследование: одинарное, множественное, интерфейса – перечислимый тип)
    3. Функциональные языки (типизация – перечислимый тип = строгая, динамическая; поддержка «ленивых» вычислений – булевский тип)

    Я имею представление,что такое двусвязный список, но написать его не знаю как.

    Вот только что я смог сделать:
    Program.cs
    <!--shcode--><pre><code class='csharp'>using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    namespace text
    {
    class Program
    {
    static void Main(string[] args)
    {
    Spisok a = new Spisok();
    int menu = -1;
    int t = 0;
    while (menu != 5)
    {
    Console.WriteLine();
    Console.WriteLine("1.Прочитать текст\n2.Вывести на монитор\n3.Сортировка\n4.Записать в файл\n5.Выход из консоли");
    Console.WriteLine();
    try
    {
    menu = Convert.ToInt32(Console.ReadLine());
    }
    catch
    {
    Console.WriteLine("\n Введите числа из меню \n");
    }
    switch(menu)
    {
    case 1:
    Console.Clear();
    Spisok.ReadFile(a);
    Console.WriteLine("Текст прочитан с текстового файла TextFile1.txt");
    Console.ReadKey();
    Console.Clear();
    t = 1;
    break;
    case 2:
    if (t == 1)
    {
    Console.Clear();
    a.Print();
    Console.ReadKey();
    Console.Clear();
    }
    else
    {
    Console.Clear();
    Console.WriteLine("Сначала выполни предыдущий пункт");
    Console.ReadKey();
    Console.Clear();
    }
    break;
    case 3:
    Console.Clear();
    Console.WriteLine("Код пока не написан");
    Console.ReadKey();
    Console.Clear();
    break;
    case 4:
    Console.Clear();
    Console.WriteLine("Код пока не написан");
    Console.ReadKey();
    Console.Clear();
    break;
    case 5:
    break;
    default:
    Console.Clear();
    Console.WriteLine("\nНеверно введено значение");
    Console.ReadKey();
    Console.Clear();
    break;
    }
    }
    }
    }
    class Proc : Base // класс процедурных языков
    {
    bool Atd; // наличие АТД
    public Proc(short age, bool Atd)
    {
    this.age = age;
    this.Atd = Atd;
    }
    public override string F()
    {
    return "Процедурный язык. Год:\t" + 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 "Объектно-оринетированный. Год:\t" + 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 "Функциональные. Год:\t" + age + " Типизация:\t" + t + " \tЛеннивость: " + lazy;
    }
    }
    abstract public class Base // главный класс (объединяет все)
    {
    public abstract string F(); // абстрактная функция
    public short age { get; set; } // общее свойство(год разработки)
    }
    }[/CODE]
    Создал еще класс "Spisok", и запихал в контейнеры, НО это не двусвязный список...может кто сможет переделать под двусвязный
    Spisok.cs
    <!--shcode--><pre><code class='csharp'>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 LinkedList<Proc> s = new LinkedList<Proc>();
    public static void ReadFile(Spisok sp)
    {
    LinkedList<Base> ss = new LinkedList<Base>();
    try
    {
    StreamReader file = new StreamReader(@"..\..\TextFile1.txt", Encoding.Default);
    while (!file.EndOfStream)
    {
    string[] data = file.ReadLine().Split(' ');
    if (data[0] == "Proc")
    {
    ss.AddLast(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);
    }
    }
    }
    }[/CODE]
     

    Вложения:

    • text.txt
      Размер файла:
      193 байт
      Просмотров:
      2
Загрузка...
Похожие Темы - Двусвязный Список
  1. koly
    Ответов:
    1
    Просмотров:
    1.295
  2. gx6060
    Ответов:
    2
    Просмотров:
    435
  3. gx6060
    Ответов:
    6
    Просмотров:
    577
  4. Shandrik
    Ответов:
    6
    Просмотров:
    813
  5. anna
    Ответов:
    8
    Просмотров:
    816

Поделиться этой страницей