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

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

14.11.2014, 14:48. Показов 2342. Ответов 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.: Текстовый файл во вложении
Вложения
Тип файла: txt text.txt (193 байт, 9 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.11.2014, 14:48
Ответы с готовыми решениями:

Двусвязный список
Всем привет Есть пример создания двусвязного списка https://metanit.com/sharp/algoritm/2.2.php Понимаю, что такое...

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

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

1
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
14.11.2014, 16:38  [ТС]
Создал еще класс "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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.11.2014, 16:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 11.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 10.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru