0 / 0 / 2
Регистрация: 07.02.2016
Сообщений: 25
1

Циклический однонаправленный линейный список с функцией поиска отрицательных элементов в списке

24.01.2017, 11:47. Показов 4977. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите организовать циклический однонаправленный линейный список с функцией поиска отрицательных элементов в списке. см. ниже вместо <<<<<<<<<<<<<<<< код >>>>>>>>>>>>> (нужно только поменять маленько)

В данный момент тут организован циклический однонаправленный линейный список с функцией вставки элемента в список справа от условно последнего элемента.
Спасибо!!!

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        class ListElem // класс элемент списка
        {
            public int Value; // поле данных
            public ListElem Next; // поле - переход на след. элемент
            public ListElem(ListElem next, int value) // конструктор класса
            {
                Next = next; // заполнение поля
                Value = value; // заполнение поля
            }
        }
        class List // класс список
        {
            int value,count=0;
            public ListElem head = null; // заголовок списка
            public ListElem current = null; // текущий элемент списка
            public List() { } // пустой конструктор
 
            public void Menu() // вставка элемента в начало списка
            {
                Console.Clear();
                Console.WriteLine("Главное меню:\n");
                Console.WriteLine(" 1. Заполнить список.");
                Console.WriteLine(" 2. Просмотреть список.");
                Console.WriteLine(" 3. Индивидуальное задание(вариант 20).");
                Console.WriteLine(" 4. Удалить элемент.");
                Console.WriteLine(" 5. Очистить список.");
                Console.WriteLine(" 6. Выход.\n");
                Console.WriteLine("\nВЫБЕРИТЕ НОМЕР НУЖНОГО ЗАДАНИЯ!\n");
 
            }
            public void FirstElem() // вставка элемента в начало списка
            {
                Console.Clear();
             
                int n = 10;
                Console.WriteLine("Введите " + n + " элементов.\n");
                for (int i = 0; i < n; i++)
                {
                    value = int.Parse(Console.ReadLine());
                    ListElem temp = new ListElem(null, value); // создание нового элемента списка и заполнение его значениями
                    if (head == null) // если список пуст
                        head = temp; // новый элемент становится первым
                    else
                    {
                        temp.Next = head; // добавление в новый элемент ссылки на первый элемент
                        head = temp; // перезапись первого элемента
                    }
                }
                current = head;
                while (current.Next != null)
                    current = current.Next;
                current.Next = head;
                count+=10;
            }
 
            public void Show() // метод просмотра списка
            {
                Console.Clear();
                Console.Write("Циклический однонаправленный список: ");
                if (count==0) // если список пуст
                    Console.WriteLine("список пуст!");
                else
                {
                    int counter1 = 0;
                    ListElem temp = head; // создание нового элемента и запись в него первого
                    while (counter1<count) // цикл до конца списка
                    {
                        Console.Write(temp.Value + "  "); // вывод на экран текущего значения
                        temp = temp.Next; // переход к след. элементу
                        counter1++;
                    }
                    Console.WriteLine("");
                }
            }
 
            
           
            public void Right_Element()//вставка справа от текущего 
            {
                Console.Clear();
                if (head == null)
                {
                    Console.WriteLine("Заполните список!");
                }
                else
                {
                    int m = count;
                    current = head;
                    for (int i = 1; i < m; i++)
                        current = current.Next; // переход к след. элементу;
                    Console.WriteLine("Введите число: ");
                    value = int.Parse(Console.ReadLine());
                    ListElem temp = new ListElem(null, value);
                    temp.Next = current.Next;
                    current.Next = temp;
                    current = temp;
                    count++;
                }
            }
            public void Delete_Elements()//удаление элемента 
            {
                Console.Clear();
                if (head != null)
                {
                    Show();
                    ListElem temp = head;
                    ListElem prev = head;
                    int i = 1;
                    Console.WriteLine("Введите позицию в списке (число): ");
                    int pos = int.Parse(Console.ReadLine());
                    while (pos != i)
                    {
                        prev = temp;
                        temp = temp.Next;
                        i++;
                    }
                    if (head == temp)
                        head = head.Next;
                    else
                        prev.Next = temp.Next;
                    count--;
                }
                else
                    Console.WriteLine("Список и так пустой! Удалять нечего.");
            }
            public void Clear_list()//метод очистки списка 
            {
                ListElem temp; int i = 0;
                while (i<count)
                {
                    temp = head.Next;
                    head = temp;
                    count--;
                }
            }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            public void Variant_20()//
            {
                Console.Clear();
                Console.WriteLine("20.  Организовать однонаправленный линейный список с функцией вывода на экран элементов меньших первого элемента.\n");
                ListElem temp = head.Next;
               // ListElem prev = head;
                if (head != null)
                {
                    bool flag = false;
                    while (temp != null)
                    {
                        if (temp.Value < head.Value)
                        { Console.Write(temp.Value.ToString() + " "); flag = true; }
                        temp = temp.Next;
                    }
                    if (flag == false) Console.Write("Элементов, меньше первого, нет в списке");
                  }
                else
                    Console.WriteLine("Список пуст!");
            }>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        }
        static void Main(string[] args)
        {
            List List = new List();
            List.Menu();
            int c = int.Parse(Console.ReadLine());
            while (c != 8)
            {
                switch (c)
                {
                    case 1: List.FirstElem(); break;//заполнить список
                    case 2: List.Show(); break;//просмотреть список
                    case 3: List.Right_Element(); break;//добавить новый элемент
                    case 4: List.Delete_Elements(); break;//удалить элемент
                    case 5: List.Clear_list(); break;//очистить список
                    case 6: break;//выход
                    default: Console.Write("Команды с таким номером нет!"); break;
                }
                do Console.Write("\nДля продолжения нажмите клавишу Enter....");
                while (Console.ReadKey().Key != ConsoleKey.Enter);
 
                List.Menu();
                c = int.Parse(Console.ReadLine());
            }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2017, 11:47
Ответы с готовыми решениями:

Однонаправленный линейный список с функцией вывода на экран только положительных элементов списка
Ребят, необходимо чуток подправить код между &lt;&lt;&lt;&lt;&lt;&lt;&lt; см. ниже &gt;&gt;&gt;&gt;&gt;&gt;&gt;... а именно...

Линейный циклический однонаправленный список
Задание организовать очередь с приоритетом (у каждого элемента свой приоритет). Элементы с...

Линейный однонаправленный список. Удаление элементов
Создать линейный однонаправленный список. Удалить из него все символы 'p' перед символом 'a'....

Линейный однонаправленный список. Описать процедуру добавления одного или нескольких элементов
Читая целые числа из текстового файла, создать линейный односвязный список. Описать процедуру ...

6
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
24.01.2017, 12:02 2
IIapa3uT,
C#
1
2
3
4
5
6
7
8
9
10
11
12
            public void Variant_20()
            {
                Console.Clear();
                Console.WriteLine("20. Организовать поиск отрицательных элементов в списке.\n");
                ListElem temp = head;
                do
                {
                    if (temp.Value < 0)
                        Console.WriteLine(temp.Value);
                    temp = temp.Next;
                } while (temp != head);
            }
0
0 / 0 / 2
Регистрация: 07.02.2016
Сообщений: 25
24.01.2017, 13:07  [ТС] 3
и вот попутный вопрос по поводу программы ( тоже списки)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void Variant_12()
            {
                
                Console.Clear();
                Console.WriteLine("12. Организовать однонаправленный линейный список с функцией вывода на экран только положительных элементов списка.\n");
                if (head == null)
                    return;
                ListElem next = head.Next;
                while (next != null)
                {
                    if (next.Value > 0)
                        Console.WriteLine(next.Value);
                    next = next.Next;
                }
                       
            }
Прикол в том что теперь всё выводит но зацикливаеться и не может остановиться.... и так и сяк не могу остановить, что бы всё вывело
0
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
24.01.2017, 13:33 4
IIapa3uT, у тебя не совсем классический однонаправленный список, в котором последний элемент указывает на null. В этом коде реализуется замкнутый (кольцевой) однонаправленный список, т.е. последний элемент указывает на первый (head), поэтому проверка while (next != null) бесконечна. Нужно просто исправить вот так:
C#
1
2
3
4
5
6
7
ListElem next = head; // начинаем с головного элемента, он тоже может быть положительным
do {
    if (next.Value > 0)
        Console.WriteLine(next.Value);
    next = next.Next;
}
while (next != head)
0
0 / 0 / 2
Регистрация: 07.02.2016
Сообщений: 25
24.01.2017, 14:00  [ТС] 5
Cпасибо!

Добавлено через 3 минуты
не дает выполнить условие выдает ошибку
Цитата Сообщение от Pikemaster Посмотреть сообщение
if (temp.Value < 0)
Цитата Сообщение от Pikemaster Посмотреть сообщение
Организовать поиск отрицательных элементов в списке
Добавлено через 16 минут
Необработанное исключение типа "System.NullReferenceException" в ConsoleApplication2.exe

Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.
0
309 / 309 / 215
Регистрация: 24.09.2013
Сообщений: 771
24.01.2017, 14:02 6
IIapa3uT, список нужно заполнить сначала, пустой он)
0
0 / 0 / 2
Регистрация: 07.02.2016
Сообщений: 25
24.01.2017, 14:06  [ТС] 7
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        class ListElem // класс элемент списка
        {
            public int Value; // поле данных
            public ListElem Next; // поле - переход на след. элемент
            public ListElem(ListElem next, int value) // конструктор класса
            {
                Next = next; // заполнение поля
                Value = value; // заполнение поля
            }
        }
        class List // класс список
        {
            int value;
            public ListElem head = null; // заголовок списка
            public ListElem current = null; // текущий элемент списка
            public List() { } // пустой конструктор
 
            public void Menu() // вставка элемента в начало списка
            {
                Console.Clear();
                Console.WriteLine("Главное меню:\n");
                Console.WriteLine(" 1. Заполнить список.");
                Console.WriteLine(" 2. Просмотреть список.");
                Console.WriteLine(" 3. Добавить новый элемент.");
                Console.WriteLine(" 4. Поиск элемента.");
                Console.WriteLine(" 5. Удалить элемент.");
                Console.WriteLine(" 6. Очистить список.");
                Console.WriteLine(" 7. Индивидуальное задание(вариант 12).");
                Console.WriteLine(" 8. Выход.\n");
                Console.WriteLine("\nВЫБЕРИТЕ НОМЕР НУЖНОГО ЗАДАНИЯ!\n");
 
            }
            public void FirstElem() // вставка элемента в начало списка
            {
                Console.Clear();
                Console.Write("Сколько элементов Вы хотите ввести? ");
                int n = int.Parse(Console.ReadLine());
                Console.WriteLine("Введите " + n + " элементов.\n");
                for (int i = 0; i < n; i++)
                {
                    value = int.Parse(Console.ReadLine());
 
 
                    ListElem temp = new ListElem(null, value); // создание нового элемента списка и заполнение его значениями
                    if (head == null) // если список пуст
                        head = temp; // новый элемент становится первым
                    else
                    {
                        temp.Next = head; // добавление в новый элемент ссылки на первый элемент
                        head = temp; // перезапись первого элемента
                    }
                }
            }
 
            public void Show() // метод просмотра списка
            {
                Console.Clear();
                Console.Write("Однонаправленный список: ");
                if (head == null) // если список пуст
                    Console.WriteLine("список пуст!");
                else
                {
                    ListElem temp = head; // создание нового элемента и запись в него первого
                    while (temp != null) // цикл до конца списка
                    {
                        Console.Write(temp.Value + "  "); // вывод на экран текущего значения
                        temp = temp.Next; // переход к след. элементу
                    }
                    Console.WriteLine("");
                }
            }
 
            public void FindElem() // метод поиска элемента по значению
            {
                Console.WriteLine("Введите элемент для поиска: ");
                value = int.Parse(Console.ReadLine());
                ListElem temp = head; // запись первого элемента в новый
                Console.WriteLine("Результаты поиска: ");
                while (temp != null) // цикл пока не дошли до конца списка
                {
                    if (temp.Value == value) // если элемент найден
                        Console.Write(temp.Value); // вернуть найденный элемент
                    temp = temp.Next; // переход к след. элементу
                }
            }
           
            public void Right_Element()//вставка справа от текущего 
            {
                Console.Clear();
                if (head == null)
                {
                    Console.WriteLine("Заполните список!");
                }
                else
                {
                    Console.WriteLine("После какого элемента вставить новый? ");
                    int m = int.Parse(Console.ReadLine());
                    current = head;
                    for (int i = 1; i < m; i++)
                        current = current.Next; // переход к след. элементу;
                    Console.WriteLine("Введите число: ");
                    value = int.Parse(Console.ReadLine());
                    ListElem temp = new ListElem(null, value);
                    temp.Next = current.Next;
                    current.Next = temp;
                    current = temp;
                }
            }
            public void Delete_Elements()//удаление элемента 
            {
                Console.Clear();
                if (head != null)
                {
                    Show();
                    ListElem temp = head;
                    ListElem prev = head;
                    int i = 1;
                    Console.WriteLine("Введите позицию в списке (число): ");
                    int pos = int.Parse(Console.ReadLine());
                    while (pos != i)
                    {
                        prev = temp;
                        temp = temp.Next;
                        i++;
                    }
                    if (head == temp)
                        head = head.Next;
                    else
                        prev.Next = temp.Next;
                }
                else
                    Console.WriteLine("Список и так пустой! Удалять нечего.");
            }
            public void Clear_list()//метод очистки списка 
            {
                ListElem temp;
                while (head != null)
                {
                    temp = head.Next;
                    head = temp;
                }
            }
 
            public void Variant_20()//индивидуальное задание
            {
                Console.Clear();
                Console.WriteLine("12.  Организовать однонаправленный линейный список с функцией вывода на экран отрицательных элементов.\n");
                ListElem temp = head.Next;
               // ListElem prev = head;
                if (head != null)
                {
                    bool flag = false;
                    while (temp != null)
                    {
                        if (temp.Value < 0)
                        { Console.Write(temp.Value.ToString() + " "); flag = true; }
                        temp = temp.Next;
                    }
                    if (flag == false) Console.Write("отрицательних Элементов, нет в списке");
                  }
                else
                    Console.WriteLine("Список пуст!");
            }
        }
        static void Main(string[] args)
        {
            List List = new List();
            List.Menu();
            int c = int.Parse(Console.ReadLine());
            while (c != 8)
            {
                switch (c)
                {
                    case 1: List.FirstElem(); break;//заполнить список
                    case 2: List.Show(); break;//просмотреть список
                    case 3: List.Right_Element(); break;//добавить новый элемент
                    case 4: List.FindElem(); break;//поиск элемента
                    case 5: List.Delete_Elements(); break;//удалить элемент
                    case 6: List.Clear_list(); break;//очистить список
                    case 7: List.Variant_12(); break;//индивидуальное задание (12 вариант)
                    case 8: break;//выход
                    default: Console.Write("Команды с таким номером нет!"); break;
                }
                do Console.Write("\nДля продолжения нажмите клавишу Enter....");
                while (Console.ReadKey().Key != ConsoleKey.Enter);
 
                List.Menu();
                c = int.Parse(Console.ReadLine());
            }
        }
    }
}

Итог. Всё работает!
0
24.01.2017, 14:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2017, 14:06
Помогаю со студенческими работами здесь

Реализуйте однонаправленный циклический список. Необходимо предусмотреть режим сортировки элементов списка без перестано
Реализуйте задание согласно варианту. В каждом из вариантов должно быть реализованы следующие...

Создать линейный однонаправленный список из целых чисел. Определить среднее арифметическое значений всех элементов
Создать линейный однонаправленный список из целых чисел. Опреде- лить среднее арифметическое...

Однонаправленный список из квадратов отрицательных элементов первого списка
Создать однонаправленный список действительных чисел, который может содержать как положительные так...

Создать однонаправленный список. Подсчитать количество отрицательных элементов списка
Создать однонаправленный список, элементы списка - целые числа, признак окончания ввода элементов -...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru