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

Описать функцию, которая удаляет из списка L первый отрицательный элемент

03.03.2017, 02:27. Показов 2500. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, у меня возник вопрос по задаче:
Пусть L динамический однонаправленный список. Описать функцию, которая удаляет из списка L первый отpицательный элемент , если такой есть.
У меня есть нужная программа, но она удаляет не те значения.
Прошу указать на ошибки.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <locale>
using namespace std;
 
struct TStack
{
   int value;
   TStack* next;
};
 
// Убирает элемент после previous
void RemoveNode(TStack* previous)
{
   TStack* to_del = previous->next;
   if(!to_del) return; // Если следующего элемента нет, то уходим
   previous->next = to_del->next; // вынимаем из списка
   delete to_del; // чистим память
}
 
// убирает самый первый отриц. элемент списка
void RemoveFirstNegative(TStack*& head)
{
    if(!head) return;
    TStack* tmp = head; 
    // Удаление головы
    if(head->value<0)
    {
       head = head->next;
       delete tmp;
       return;
    }
    // Итерируем по списку
    while(tmp->next)
   {
       // если нашли отрицательный элемент
      if(tmp->next->value<0)
      {
         RemoveNode(tmp);
         return;
      }
      tmp = tmp->next;
   }
}
 
//----------------------------------------------//
TStack*& Push(TStack*& stack, int value)
{
   TStack* node = new TStack;
   node->value = value;
   node->next = stack;
   stack = node;
 
   return stack;
}
//----------------------------------------------//
TStack*& FillRandom(TStack*& stack, size_t count)
{
   for (; count; --count)
   {
      Push(stack, rand() % 16 + (-5));
   }
 
   return stack;
}
//----------------------------------------------//
void Print2(TStack* stack)
{
   cout << "Измененный список:" << endl;
   RemoveNode(stack);
   RemoveFirstNegative(stack);
   for (; stack; stack = stack->next)
   {
      cout << stack->value << ' ';
   }
   cout << endl;
}
//----------------------------------------------//
void Print(TStack* stack)
{
   cout << "Исходный список:" << endl;
   for (; stack; stack = stack->next)
   {
      cout << stack->value << ' ';
   }
   cout << endl;
}
//----------------------------------------------//
 
int main()
{
   setlocale (LC_ALL, "Rus");
   srand(time(NULL));
 
   cout << "Введите количество элементов: ";
   size_t count;
   cin >> count;
 
   TStack* stack = NULL;
 
   FillRandom(stack, count);
   Print(stack);
   Print2(stack);
 
   system("pause");
 
   return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2017, 02:27
Ответы с готовыми решениями:

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

Стеки (функция, которая удаляет из стека первый отрицательный элемент, если такой есть)
Здравствуйте! Помогите пожалуйста разработать функцию, которая удаляет из стека первый...

Описать функцию, которая удаляет все минимальные элементы из списка
Помогите пожалуйста. Я студент второго курса. (Не программист ни разу &gt;.&lt;&quot;) Мне нужна помощь в...

Динамические структуры данных. Сформировать динамический список, описать функцию, которая удаляет из списка за каждым вхождением элемента Е
Сформировать динамический список (стек или очередь), считая, что длина списка (количество...

2
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
03.03.2017, 09:39 2
Зачем нужна 71 строка? Если её убрать, то программа, на первый взгляд, работает верно.
1
2 / 2 / 2
Регистрация: 20.10.2016
Сообщений: 130
03.03.2017, 11:24  [ТС] 3
Большое спасибо, все действительно работает без 71 строчки
0
03.03.2017, 11:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2017, 11:24
Помогаю со студенческими работами здесь

Описать процедуру и функцию которая, удаляет из списка L за каждым вхождением элемента Е один элем если такой есть, и он отличен от Е
помогите пожалуйста очень нужно я в С++ очень плохо разбираюсь

Описать процедуру, которая переносит в конец непустого списка L его первый элемент
2. Описать процедуру, которая переносит в конец непустого списка L его первый элемент. Помогите,...

Описать процедуру или функцию, которая находит max элемент не пустого списка L
Задание: описать процедуру или функцию, которая находит max элемент не пустого списка L (инф. часть...

Описать функцию, которая удаляет из строки все лишние пробелы
Помогите пожалуйста решить! Заранее благодарен!) Описать функцию, которая удаляет из строки все...


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

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

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