Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для Angelina Jolie
0 / 0 / 3
Регистрация: 07.02.2015
Сообщений: 153

В двусвязном-циклическом указатель на предыдущий элемент не получился

31.03.2015, 19:16. Показов 924. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
суть такая:
Имеется код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void Insert_Element(int value)
            {
                if(Head == null)
                {
                    Element temp = new Element(value, Head, Head);
                    Head = temp;
                }
                else
                {
                    Element temp = new Element(value, null, null);
                    Head.Previous = temp;
                    temp.Next = Head;
                    Head = temp;
                }
            }
с указателем next у меня всё на ништяках, но вот расстановка previous у меня косячная.
при проверке вывода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void Show_The_List_From_Tail()
            {
                Element temp = Head.Previous;
                if(Head.Previous==null)
                {
                    Console.WriteLine("ggg");
                    return;
                }
                while (temp != Head)
                {
                    if (temp == null)
                    {
                        Console.WriteLine("gg");
                        break;
                    }
                    Console.Write(temp.Value + " ");
                    temp = temp.Previous;
                }
                Console.WriteLine(" ");
            }
head.previous получается null.
в голове затуп и я никак не допру что я ту тперекосячиваю.

весь код для наглядности:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
 
/*Организовать циклический двунаправленный линейный с функцией 
 * удаления диапазона значений из списка (дан первый номер и последний
 * номер элементов, которые необходимо удалить из списка).*/
 
namespace Lab_2_EVM
{
    class Program
    {
        class Element
        {
            public Element Next;
            public Element Previous;
            public int Value;
            public Element(int value, Element next, Element prev)
            {
                Value = value;
                Next = next;
                Previous = prev;
            }
        }
 
        class List
        {
            public Element Head = null;
            public List() { }
 
            public void Insert_Element(int value)
            {
                if(Head == null)
                {
                    Element temp = new Element(value, Head, Head);
                    Head = temp;
                }
                else
                {
                    Element temp = new Element(value, null, null);
                    Head.Previous = temp;
                    temp.Next = Head;
                    Head = temp;
                }
            }
 
            public void Show_The_List_From_Head()
            {
                Element temp = Head;
                while (temp != Head.Previous) 
                {
                    Console.Write(temp.Value + " ");
                    temp = temp.Next;
                }
                Console.WriteLine(" ");
            }
 
            public void Show_The_List_From_Tail()
            {
                Element temp = Head.Previous;
                if(Head.Previous==null)
                {
                    Console.WriteLine("ggg");
                    return;
                }
                while (temp != Head)
                {
                    if (temp == null)
                    {
                        Console.WriteLine("gg");
                        break;
                    }
                    Console.Write(temp.Value + " ");
                    temp = temp.Previous;
                }
                Console.WriteLine(" ");
            }
 
            public void Search_The_Element_By_Key(int key)
            {
                Element temp = Head;
                int done = 0;
                while (temp != Head.Previous)
                {
                    if(temp.Value == key)
                    {
                        done = 1;
                        Console.Write(temp.Value + " ");
                        temp = temp.Next;
                    }
                    else
                    {
                        temp = temp.Next;
                    }
 
                    if (temp == Head.Previous && done != 1)
                    {
                        Console.WriteLine("Нет такого Элемента!");
                    }
                }
                Console.WriteLine(" ");
            }
 
            public void Delete_Elements_From_Place_To_Place(int first_place,int last_place)
            {
                
            }
        }
 
        static void menu()
        {
            List MyList = new List();
            while(true)
            {
                Console.WriteLine("Выберите необходимое действие:");
                Console.WriteLine("1 - Ввод списка");
                Console.WriteLine("2 - Показ списка");
                Console.WriteLine("3 - Поиск элемента по ключу");
                Console.WriteLine("4 - Удаление диапазона элементов");
                Console.WriteLine("5 - Очистка списка");
                Console.WriteLine("Выход любая другая цифра");
                int menuitem = Convert.ToInt32(Console.ReadLine());
                switch (menuitem)
                {
                    case 1:
                        Console.Clear();
                        Console.Write("Введите элемент: ");
                        int elem = Convert.ToInt32(Console.ReadLine());
                        MyList.Insert_Element(elem);
                        break;
                    case 2:
                        Console.Clear();
                        Console.Write("В прямом порядке: ");
                        MyList.Show_The_List_From_Head();
                        Console.Write("В обратном порядке: ");
                        MyList.Show_The_List_From_Tail();
                        break;
                    case 3:
                        Console.Clear();
                        Console.Write("Введите элемент для поиска: ");
                        int key = Convert.ToInt32(Console.ReadLine());
                        MyList.Search_The_Element_By_Key(key);
                        break;
                    case 4:
                        Console.Clear();
                        Console.Write("Задать начальный элемент издиапазона удаления: ");
                        int first = Convert.ToInt32(Console.ReadLine());
                        Console.Write("Задать последний элемент издиапазона удаления: ");
                        int last = Convert.ToInt32(Console.ReadLine());
                        MyList.Delete_Elements_From_Place_To_Place(first, last);
                        break;
                    default:
                        return;
                        break;
                }
            }
        }
 
        static void Main(string[] args)
        {
            Program.menu();
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2015, 19:16
Ответы с готовыми решениями:

Как получить указатель на начальный элемент структуры в двусвязном списке
Здравствуйте! Прошу помощи с этим, в чём я ошибаюсь? Программа для консоли, с простым меню. Написал функцию loadList() загружающую...

Не работает указатель на предыдущий элемент в списке
Суть такова: создается список из n элементов(вводится с клавиатуры), затем нужно вставить элемент в конкретную позицию, которая так же...

Как сделать указатель на предыдущий элемент в массиве без итераторов?
тип MyData хранит в себе матрицу. myarray хранит в себе указатели на матрицы пробую сделать так. Не могу понять как указатель...

4
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
31.03.2015, 21:08
Angelina Jolie,
C#
1
2
3
                    Element temp = new Element(value, Head, Head.Previous);
                    Head.Previous = temp;
                    Head = temp;
0
 Аватар для Angelina Jolie
0 / 0 / 3
Регистрация: 07.02.2015
Сообщений: 153
31.03.2015, 21:13  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
Angelina Jolie,
C#
1
2
3
                    Element temp = new Element(value, Head, Head.Previous);
                    Head.Previous = temp;
                    Head = temp;
C#
1
Element temp = Head.Previous;
тут temp будет null

Кокраз выводит ggg
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
31.03.2015, 21:50
C#
1
2
3
4
5
6
7
8
9
10
11
12
public void Insert_Element(int value)
            {
                var temp = new Element(value, Head, null);
                if (Head == null)
                   Head = temp.Previous = temp.Next = temp;
                else
                {
                   temp.Previous = Head.Previous;
                   temp.Previous.Next = temp;
                   Head.Previous = temp;
                }
            }
Добавлено через 40 секунд
IComparable для сортировки двусвязного списка
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
31.03.2015, 21:53
Angelina Jolie,
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
    class Element
    {
        public Element Next;
        public Element Previous;
        public int Value;
        public Element(int value, Element next, Element prev)
        {
            Value = value;
            Next = next;
            Previous = prev;
        }
    }
 
    internal class List
    {
        public Element Head = null;
 
        public void Insert_Element(int value)
        {
            if (Head == null)
            {
                Head = new Element(value, null, null);
                Head.Previous = Head;
                Head.Next = Head;
            }
            else
            {
                var temp = new Element(value, Head, Head.Previous);
                Head.Previous.Next = temp;
                Head.Previous = temp;
                Head = temp;
            }
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2015, 21:53
Помогаю со студенческими работами здесь

Двусвязный список с целыми числами - Указатель, который ссылается на предыдущий блок
Всем здравствуйте, сразу прошу прощения за тему, которых и так навалом в нете. Я перечитал уйму информации по созданию и не могу понять с...

Найти максимальный элемент и показать предыдущий элемент в матрице
Дана матрица, нужно найти макс. елемент и и показать предыдущий елемент. как ето реализовать через Stringgrid?? сори за нелепый...

Как найти k-ый элемент в двусвязном списке?
Задание состоит в том, чтобы найти m-ый элемент в двусвязном списке и вывести его на экран.вот моя попытка void Spisok:: find() { ...

В двусвязном списке удалить элемент после заданного
Подскажите как в двусвязном списке удалить элемент после заданного?? (на с++)

Вывести массив размера N, первый элемент которого равен А, второй В, а каждый предыдущий элемент равен сумме всех предыдущих
Данны целые числа N(<2), А и В. сформулировать и вывести целочисленный массив размера N, первый элемент которого равен А, второй В, а...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru