Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 10

Двусторонний список

15.01.2013, 20:38. Показов 2501. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Нужна программа, которая печатала бы список, с возможностью добавления строки с начала либо с конца, а также удаления с начала либо с конца! Без использования встроенного списка! Помогите пожалуйста, очень надо!!!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.01.2013, 20:38
Ответы с готовыми решениями:

двусторонний список
помогите понять почему программа не работает, и как сделать чтобы она заработала #include <stdio.h> #include <iostream> ...

Связанный двусторонний список
Решил написать свой двусторонний список и совершенно внезапно столкнулся с проблеммой отчистки. Итак вот класс элемента списка и его...

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

8
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
15.01.2013, 21:03
В интернете - куча реализаций. Учитесь гуглить - google.com/search?q=two-way+linked+list+c#
Вот тут - http://stackoverflow.com/quest... inked-list
Или тут - http://www.yetanotherchris.me/... -in-c.html
1
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 10
16.01.2013, 14:21  [ТС]
Спасибо, теперь попробую с этим разобраться!

Добавлено через 16 часов 32 минуты
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
using System;
using System.Text;
using System.Collections.Generic;
 
public class laba
{
    public static void Main()
    {
        // Создаем список
        string[] words = { "Митя", "Вася", "Семен", "Аркадий" };
        LinkedList<string> sentence = new LinkedList<string>(words);
        Display(sentence, "Список:");
      
 
        // Добавление в начало
        sentence.AddFirst("Виталий");
        Display(sentence, "Добавление элемента в начало:");
 
        // Добавление в конец
        sentence.AddLast("Иосиф");
        Display(sentence, "Добавление элемента в конец:");
 
        //Удаление с начала
        sentence.RemoveFirst();
        Display(sentence, "Удаление первого элемента:");
 
        //Удаление с конца
        sentence.RemoveLast();
        Display(sentence, "Удаление последнего элемента:");
        Console.ReadKey();
 
    }
 
      
    private static void Display(LinkedList<string> words, string test)
    {
        Console.WriteLine(test);
        foreach (string word in words)
        {
            Console.Write(word + " ");
        }
        Console.WriteLine();
        Console.WriteLine();
    }
 
    
}
Скажи, мне вот нужно написать две программы 1-использовать собственный список, 2-встроенный список(стандартный). Хотелось бы узнать каким методом я сделал.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
16.01.2013, 14:33
Стандартный
1
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 10
16.01.2013, 14:36  [ТС]
А как создать собственный список? В чём отличие?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
16.01.2013, 15:22
Цитата Сообщение от Oleg3110 Посмотреть сообщение
А как создать собственный список?
Скопировать реализацию с тех ссылок, которые я привел.
Цитата Сообщение от Oleg3110 Посмотреть сообщение
В чём отличие?
Там реализованы только основные, базовые операции.
1
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 10
17.01.2013, 16:09  [ТС]
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
public class DoubleLink
{
public string Title { get; set; }
public DoubleLink PreviousLink { get; set; }
public DoubleLink NextLink { get; set; }
 
public DoubleLink(string title)
{
Title = title;
}
 
public override string ToString()
{
return Title;
}
}
 
public class DoubleLinkedList
{
private DoubleLink _first;
 
public bool IsEmpty
{
get
{
return _first == null;
}
}
 
public DoubleLinkedList()
{
_first = null;
}
 
public DoubleLink Insert(string title)
{
// Creates a link, sets its link to the first item and then makes this the first item in the list.
DoubleLink link = new DoubleLink(title);
link.NextLink = _first;
 
if (_first != null)
_first.PreviousLink = link;
 
_first = link;
 
return link;
}
 
public DoubleLink Delete()
{
// Gets the first item, and sets it to be the one it is linked to
DoubleLink temp = _first;
 
if (_first != null)
{
_first = _first.NextLink;
 
if (_first != null)
_first.PreviousLink = null;
}
 
return temp;
}
 
public override string ToString()
{
DoubleLink currentLink = _first;
 
StringBuilder builder = new StringBuilder();
 
while (currentLink != null)
{
builder.Append(currentLink);
currentLink = currentLink.NextLink;
}
 
return builder.ToString();
}
 
///// New operations
public void InsertAfter(DoubleLink link, string title)
{
if (link == null || string.IsNullOrEmpty(title))
return;
 
DoubleLink newLink = new DoubleLink(title);
newLink.PreviousLink = link;
 
// Update the 'after' link's next reference, so its previous points to the new one
if (link.NextLink != null)
link.NextLink.PreviousLink = newLink;
 
// Steal the next link of the node, and set the after so it links to our new one
newLink.NextLink = link.NextLink;  
link.NextLink = newLink;
}
}
 
public static void DoubleLinkedList()
{
DoubleLinkedList list = new DoubleLinkedList();
 
list.Insert("1");
list.Insert("2");
list.Insert("3");
DoubleLink link4 = list.Insert("4");
list.Insert("5");
 
Console.WriteLine("List: " + list);
list.InsertAfter(link4, "[4a]");
Console.WriteLine("List: " + list);
 
Console.Read();
}
Как правильно вставить этот кусок в программу?

Добавлено через 31 минуту
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication5
{
 
    public class Node
    {
        private object _Data;
        private Node _Next;
        private Node _Prev;
        public object Value
        {
            get { return _Data; }
            set { _Data = value; }
        }
        public Node(object Data)
        {
            this._Data = Data;
        }
        public Node Next
        {
            get { return this._Next; }
            set { this._Next = value; }
        }
        public Node Prev
        {
            get { return this._Prev; }
            set { this._Prev = value; }
        }
    }
        class Doubly_Linked_List
    {
        private Node First;
        private Node Current;
        private Node Last;
        private uint size;
 
        public Doubly_Linked_List()
        {
            size = 0;
            First = Current = Last = null;
        }
 
        public void Insert_Index(object newElement, uint index) //вставить по индекусу
        {
            if (index < 1 || index > size) //вброс ошибки, если неправильный индекс
            {
                throw new InvalidOperationException();
            }
            else if (index == 1) //если начало
            {
                Push_Front(newElement);
            }
            else if (index == size) //если конец
            {
                Push_Back(newElement);
            }
            else //иначе ищем элемент с таким индексом
            {
                uint count = 1;
                Current = First;
                while (Current != null && count != index)
                {
                    Current = Current.Next;
                    count++;
                }
                Node newNode = new Node(newElement); //создаем объект
                Current.Prev.Next = newNode;
                newNode.Prev = Current.Prev;
                Current.Prev = newNode;
                newNode.Next = Current;
            }
        }
        public void Push_Front(object newElement)
        {
            Node newNode = new Node(newElement);
 
            if (First == null)
            {
                First = Last = newNode;
            }
            else
            {
                newNode.Next = First;
                First = newNode; //First и newNode указывают на один и тот же объект
                newNode.Next.Prev = First;
            }
            Count++;
        }
 
        public Node Pop_Front()
        {
            if (First == null)
            {
                throw new InvalidOperationException();
            }
            else
            {
                Node temp = First;
                if (First.Next != null)
                {
                    First.Next.Prev = null;
                }
                First = First.Next;
                Count--;
                return temp;
            }
        }
 
        public void Push_Back(object newElement)
        {
            Node newNode = new Node(newElement);
 
            if (First == null)
            {
                First = Last = newNode;
            }
            else
            {
                Last.Next = newNode;
                newNode.Prev = Last;
                Last = newNode;
            }
            Count++;
        }
 
        public Node Pop_Back()
        {
            if (Last == null)
            {
                throw new InvalidOperationException();
            }
            else
            {
                Node temp = Last;
                if (Last.Prev != null)
                {
                    Last.Prev.Next = null;
                }
                Last = Last.Prev;
                Count--;
                return temp;
            }
        }
        public uint Count //свойство для size
        {
            get { return size; }
            set { size = value; }
        }
        public void Display() //вывести в прямом порядке
        {
            if (First == null)
            {
                Console.WriteLine("Doubly Linked List is empty");
                return;
            }
            Current = First;
            uint count = 1;
            while (Current != null)
            {
                Console.WriteLine("Element " + count.ToString() + " : " + Current.Value.ToString());
                count++;
                Current = Current.Next;
            }
        }
        public void DeleteElement(uint index)
        { //удалить элемент по индексу
            if (index < 1 || index > size)
            {
                throw new InvalidOperationException();
            }
            else if (index == 1)
            {
                Pop_Front();
            }
            else if (index == size)
            {
                Pop_Back();
            }
            else
            {
                uint count = 1;
                Current = First;
                while (Current != null && count != index)
                {
                    Current = Current.Next;
                    count++;
                }
                Current.Prev.Next = Current.Next;
                Current.Next.Prev = Current.Prev;
            }
        }
            
        static void Main(string[] args)
        {
            Console.ReadKey(); 
        }
    }
}
Подскажите, что нужно написать в Main, чтобы появился список и можно было использовать ранее объявленные методы. Как я понимаю, здесь только структуру без списка.
0
 Аватар для kesean
292 / 291 / 108
Регистрация: 04.09.2010
Сообщений: 638
17.01.2013, 16:43
Полезли в дебри.
Цитата Сообщение от Oleg3110 Посмотреть сообщение
А как создать собственный список?
Можно так:
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
        static void Main(string[] args)
        {
            string[] words = { "Митя", "Вася", "Семен", "Аркадий" };
            Console.WriteLine("Базовый список:");
            Console.WriteLine(string.Join(" ", words));
            Console.WriteLine("Добавление с начала:");
            Console.WriteLine(string.Join(" ", Add(words, "Петя", 0)));
            Console.WriteLine("Добавление с конца:");
            Console.WriteLine(string.Join(" ", Add(words, "Петя", words.Length)));
            Console.WriteLine("Добавление по центру:");
            Console.WriteLine(string.Join(" ", Add(words, "Петя", (int)(words.Length / 2))));
            Console.WriteLine("Удаление с начала:");
            Console.WriteLine(string.Join(" ", Remove(words, 0)));
            Console.WriteLine("Удаление с конца:");
            Console.WriteLine(string.Join(" ", Remove(words, words.Length - 1)));
            Console.WriteLine("Удаление по индексу 2:");
            Console.WriteLine(string.Join(" ", Remove(words, 2)));
            Console.ReadLine();
        }
        static string[] Add(string[] array, string word, int index)
        {
            string[] ret = new string[array.Length + 1];
            ret[index] = word;
            Array.ConstrainedCopy(array, 0, ret, 0, index);
            Array.ConstrainedCopy(array, index, ret, index + 1, array.Length - index);
            return ret;
        }
        static string[] Remove(string[] array, int index)
        {
            string[] ret = new string[array.Length - 1];
            Array.ConstrainedCopy(array, 0, ret, 0, index);
            Array.ConstrainedCopy(array, index + 1, ret, index, array.Length - index - 1);
            return ret;
        }
Или все-таки необходимо создать объект списка с нужными методами? Судя по первому посту, нужна программа, печатающая список...
1
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 10
18.01.2013, 14:38  [ТС]
Я во всем разобрался сам)

Добавлено через 3 минуты
Спасибо чувак, у тебя все гораздо проще)

Добавлено через 21 час 46 минут
Помогите вставить сюда класс, вместо строки. Но так чтобы остался встроенный список.
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
using System;
using System.Text;
using System.Collections.Generic;
 
public class laba
{
    public static void Main()
    {
        // Создаем список
        string[] words = { "Митя", "Вася", "Семен", "Аркадий" };
        LinkedList<string> sentence = new LinkedList<string>(words);
        Display(sentence, "Список:");
 
 
        // Добавление в начало
        sentence.AddFirst("Виталий");
        Display(sentence, "Добавление элемента в начало:");
 
        // Добавление в конец
        sentence.AddLast("Иосиф");
        Display(sentence, "Добавление элемента в конец:");
 
        //Удаление с начала
        sentence.RemoveFirst();
        Display(sentence, "Удаление первого элемента:");
 
        //Удаление с конца
        sentence.RemoveLast();
        Display(sentence, "Удаление последнего элемента:");
        Console.ReadKey();
 
    }
 
 
    private static void Display(LinkedList<string> words, string test)
    {
        Console.WriteLine(test);
        foreach (string word in words)
        {
            Console.Write(word + " ");
        }
        Console.WriteLine();
        Console.WriteLine();
    }
 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2013, 14:38
Помогаю со студенческими работами здесь

Двусторонний обмен
Помогите разобрать ситуацию. Молодой сайт. все понулям, но проиндексирован. начинаем обмен и все подобное. Ставим на сайт...

Двусторонний NAT
Здравствуйте, уважаемые форумчане! Прошу помощи в решении, видимо, несложной задачи, но мне она не даётся. На схеме, представленной...

Двусторонний ключ.
Набрел на такую статью http://tqfp.org/circuit-desykn/dvustoro ... orah.html# Вроде бы последняя схема моим потребностям удовлетворяет, но...

Двусторонний предел функции
Добрый день Помогите пожалуйста разобраться с двусторонними пределами функции. Допустим есть f(x)= \frac{x}{2-{x}^{2}} у этой...

Двусторонний обмен сообщениями
В общем прошу хэлпы!Нужно сделать чат с двусторонним обменом сообщениями,обмен сообщениями Клиент-Сервер работает,всё выводит,а...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru