Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двусвязный список 
:(
    Опции темы
b0006
  Дата 14.11.2014, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.12.2013

Репутация: нет
Всего: нет



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

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

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

Вот только что я смог сделать:
Program.cs
Код

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; } // общее свойство(год разработки)
    } 
}


Создал еще класс "Spisok", и запихал в контейнеры, НО это не двусвязный список...может кто сможет переделать под двусвязный
Spisok.cs
Код

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);
            }
        }
    }
}



Добавлено через 1 минуту и 36 секунд
Вот текстовый файл,а то вложенный некорректно показывает текст
Proc 1990 true
Proc 2000 true
Proc 1994 true
Proc 1995 true
Obj 1991 одинарное
Obj 2001 одинарное
Obj 1995 множественное
Obj 1992 интерфейс
Func 1992 строгая true
Func 2002 строгая false
Func 1996 динамическая true
Func 1997 строгая false


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  text.txt 0,19 Kb
PM MAIL   Вверх
Rockie
Дата 14.11.2014, 18:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: нет
Всего: 31



Двусвязный список на C# это как-то не айс..

Если для учебной задачи как у вас, то двусвязный список реализуется например на C/C++ через указатели. В .NET C# работа с указателями по умолчанию не рекомендоава и скрыта, а в .NET 3.5 есть тип двусвязного списка.

Кароче imho задание странноватое


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.