Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
1
.NET 4.x

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

14.11.2014, 14:48. Показов 1497. Ответов 1
Метки нет (Все метки)

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

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

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

Вот только что я смог сделать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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.: Текстовый файл во вложении
0
Вложения
Тип файла: txt text.txt (193 байт, 9 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2014, 14:48
Ответы с готовыми решениями:

Двусвязный список
Всем привет Есть пример создания двусвязного списка ...

Двусвязный список
Приветствую всех. Искал информацию про двусвязный список нашел вот это ТЫК, кое что доже понял:)...

Двусвязный список
Сказали реализовать двусвязный список, считывая данные для списка из файла. Какие данные могут быть...

Двусвязный список на языке C#
В программе должны быть реализованы два типа: открытый (public) тип списка – List; внутренний...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
1
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
14.11.2014, 16:38  [ТС] 2
Создал еще класс "Spisok", и запихал в контейнеры, НО это не двусвязный список...может кто сможет переделать под двусвязный

Program.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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);
            }
        }
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2014, 16:38

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Циклический двусвязный список
Доброго времени суток! Собственно вот в чем вопрос: имеется двусвязный циклический список и нужно...

Двусвязный циклический список
Скажите как сделать список в моей программе циклическим? Как прописать файловые указатели на...

Двусвязный линейный список?
Всем доброго дня! Помогите пожалуйста. Есть задача: Дан двусвязный линейный список с целыми...

Двусвязный циклический список
Вводятся элементы двусвязного циклического списка - числа, при добавлении в список положительные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.