Форум программистов CodeGuru
26 Сентябрь 2018, 16:23:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Двусвязный список  (Прочитано 13414 раз)
0 Пользователей и 1 Гость смотрят эту тему.
b0006
Новичок
*
Офлайн Офлайн

Сообщений: 1


Просмотр профиля
« : 14 Ноябрь 2014, 19:32:59 »

Вот задание:
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);
            }
        }
    }
}
Вот текстовый файл:
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
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 14 Ноябрь 2014, 20:57:57 »

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

Вот только что я смог сделать:

Если это "что я смог сделать" (есть тот код что я увидел) и при этом "Я имею представление,что такое двусвязный список, но написать его не знаю как", то вы лжете насчет того что этот код - ваш. Такие дела.

Скорее всего вы просто взяли у кого-то лабу с односвязным списком и теперь бегаете по форумам, пытаясь навесить лапшу на уши программистам. Типа "допишите, а то не понимаю как".

Имхо, смысла нет.
Таких не любят. Неужели вы думаете что кто-то поведется? Тут одного взгляда достаточно чтобы понять что как.

З.Ы. для того чтобы сделать из односвязного списка двусвязный, надо добавить поле prev класса Node в класс Node. Ну и реализовать алгоритмы для работы именно с двусвязным списком.
« Последнее редактирование: 14 Ноябрь 2014, 21:01:54 от 3V » Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!