Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
9 / 9 / 2
Регистрация: 23.09.2012
Сообщений: 150
1

Список: Найти и удалить максимальный элемент списка

19.05.2013, 15:26. Показов 2363. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сформировать однонаправленный список, в котором будут храниться целые числа. Найти и удалить максимальный элемент списка. Первый элемент списка заменить на 0.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2013, 15:26
Ответы с готовыми решениями:

Не находится максимальный элемент списка
Подскажите, пожалуйста, почему не выводит максимальный элемент(последняя функция). Точнее выводит...

Удалить элемент из списка и добавить новый элемент
Здравствуйте уважаемые!! Помогите пожалуйста! Создать список из 10 идентификаторов с длинной...

Удалить из массива максимальный по модулю элемент
Всем привет! Помогите понять ,что не правильно.Задано 3 файла Х.txt,Y.txt и Z.txt и нужно удалить...

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

4
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
19.05.2013, 16:11 2
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
 
typedef struct node_t
{
   int value;
   struct node_t* next;
}  TNode;
 
//-----------------------------------------------------------------------------
TNode* Push(TNode** list, int value)
{
   assert(list);
 
   TNode* node = (TNode*) malloc(sizeof(TNode));
   node->value = value;
   node->next = *list;
   *list = node;
 
   return *list;
}
//-----------------------------------------------------------------------------
int Pop(TNode** list)
{
   assert(list);
   assert(*list);
 
   TNode* node = *list;
   *list = (*list)->next;
   int value = node->value;
   free(node);
 
   return value;
}
//-----------------------------------------------------------------------------
TNode* GetMax(TNode* list)
{
   assert(list);
 
   TNode* max = list;
   list = list->next;
 
   for (; list; list = list->next)
   {
      if (list->value > max->value)
      {
         max = list;
      }
   }
 
   return max;
}
//-----------------------------------------------------------------------------
TNode* DeleteMax(TNode** list)
{
   TNode* max = GetMax(*list);
 
   if (max == *list)
   {
      Pop(list);
   }
   else
   {
      TNode* cur = *list;
 
      for (; cur->next != max; cur = cur->next) { ; }
 
      Pop(&cur->next);
   }
 
   return *list;
}
//-----------------------------------------------------------------------------
TNode* GetRandomList(int count)
{
   TNode* list = NULL;
 
   for (; count > 0; --count)
   {
      Push(&list, rand() % 90 + 10);
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void Print(const TNode* list)
{
   for (; list; list = list->next)
   {
      printf("%d, ", list->value);
   }
   printf("\b\b \n");
}
//-----------------------------------------------------------------------------
 
int main()
{
   srand(time(NULL));
 
   TNode* list = GetRandomList(10);
 
   printf("source: ");
   Print(list);
 
   DeleteMax(&list);
   Pop(&list);
   Push(&list, 0);
 
   printf("result: ");
   Print(list);
 
   return 0;
}
Список: Найти и удалить максимальный элемент списка
1
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
19.05.2013, 16:33 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
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
 
typedef struct node_t
{
   int value;
   struct node_t* next;
}  TNode;
 
//-----------------------------------------------------------------------------
TNode* Push(TNode** list, int value)
{
   assert(list);
 
   TNode* node = (TNode*) malloc(sizeof(TNode));
   node->value = value;
   node->next = *list;
   *list = node;
 
   return *list;
}
//-----------------------------------------------------------------------------
int Pop(TNode** list)
{
   assert(list);
   assert(*list);
 
   TNode* node = *list;
   *list = (*list)->next;
   int value = node->value;
   free(node);
 
   return value;
}
//-----------------------------------------------------------------------------
TNode** GetMax(TNode** list)
{
   assert(list);
 
   TNode** max = list;
   TNode* cur = *list;
 
   for (; cur->next; cur = cur->next)
   {
      if (cur->next->value > (*max)->value)
      {
         max = &cur->next;
      }
   }
 
   return max;
}
//-----------------------------------------------------------------------------
TNode* GetRandomList(int count)
{
   TNode* list = NULL;
 
   for (; count > 0; --count)
   {
      Push(&list, rand() % 90 + 10);
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void Print(const TNode* list)
{
   for (; list; list = list->next)
   {
      printf("%d, ", list->value);
   }
   printf("\b\b \n");
}
//-----------------------------------------------------------------------------
 
int main()
{
   srand(time(NULL));
 
   TNode* list = GetRandomList(10);
 
   printf("source: ");
   Print(list);
 
   Pop(GetMax(&list));
   Pop(&list);
   Push(&list, 0);
 
   printf("result: ");
   Print(list);
 
   return 0;
}
2
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
20.05.2013, 02:39 4
Спасибо большое,буду разбираться и пытаться по своему проще сделать!не могли бы Вы пожалуйста прокомментировать строки:6.8,9,10,15,17,25,27,30,31,56,62(если Вам не сложно)?!
0
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
20.05.2013, 04:07 5
Цитата Сообщение от Olga1212 Посмотреть сообщение
не могли бы Вы пожалуйста прокомментировать строки:6.8,9,10,15,17,25,27,30,31,56,62(если Вам не сложно)?!
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
 
// Структура узла списка:
//    value - значение
//    next - указатель на следующий узел
// В Си при использовании структуры, кроме имени, нужно всегда
// в начале ставить struct. Чтобы этого не приходилось впредь
// делать над структурой часто делают обёртку typedef-ом.
// Т.е. это аналогично:
// struct node_t
// {
//    int value;
//    struct node_t* next;
// };
// typedef struct node_t TNode;
// И теперь вы можете переменную объявить либо так:
// struct node_t* node;
// либо более привычным:
// TNode* node;
typedef struct node_t
{
   int value;
   struct node_t* next;
}  TNode;
 
//-----------------------------------------------------------------------------
TNode* Push(TNode** list, int value)
{
   // assert обычно применяется при отладке
   // Приведённая ниже запись контролирует наличие указателя list.
   // В случае, если (list == NULL) программа прекратит своё выполнение,
   // а в консоли появится соответствующее сообщение.
   assert(list);
 
   // Выделяем память под новый узел. Размер такого узла равен sizeof(TNode),
   // т.е. int value = 4 байта; и struct node_t* next = 4 байта; итого: 8 байт
   TNode* node = (TNode*) malloc(sizeof(TNode));
   node->value = value;
   node->next = *list;
   *list = node;
 
   return *list;
}
//-----------------------------------------------------------------------------
// Функция извлечения элемента из списка. В качестве аргумента передаётся
// адрес указателя на первый узел.
int Pop(TNode** list)
{
   // Аналогично строке 36. Проверяем не передан ли нам в качестве list - NULL,
   // и также проверяем, что адрес на верхний узел тоже существует.
   assert(list);
   assert(*list);
 
   // Принцип удаления верхнего узла из стека заключается в том, чтобы
   // временно сохранить указатель на верхний элемент. Основной же указатель
   // сместить на второй. А после, верхний элемент (под временным указателем)
   // просто удалить.
   TNode* node = *list;
   *list = (*list)->next;
   int value = node->value;
   free(node);
 
   return value;
}
//-----------------------------------------------------------------------------
TNode** GetMax(TNode** list)
{
   assert(list);
 
   TNode** max = list;
   TNode* cur = *list;
 
   for (; cur->next; cur = cur->next)
   {
      if (cur->next->value > (*max)->value)
      {
         max = &cur->next;
      }
   }
 
   return max;
}
//-----------------------------------------------------------------------------
// Функция генерирует список длиной count в диапазоне от 10 до 99
TNode* GetRandomList(int count)
{
   TNode* list = NULL;
 
   for (; count > 0; --count)
   {
      // Добавляем в список элемент со случайно сгенерированным
      // значением в диапазоне от 10 до 99
      Push(&list, rand() % 90 + 10);
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void Print(const TNode* list)
{
   for (; list; list = list->next)
   {
      printf("%d, ", list->value);
   }
   printf("\b\b \n");
}
//-----------------------------------------------------------------------------
 
int main()
{
   srand(time(NULL));
 
   TNode* list = GetRandomList(10);
 
   printf("source: ");
   Print(list);
 
   Pop(GetMax(&list));
   Pop(&list);
   Push(&list, 0);
 
   printf("result: ");
   Print(list);
 
   return 0;
}
0
20.05.2013, 04:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2013, 04:07
Помогаю со студенческими работами здесь

Удалить из списка k-й по порядку элемент
Помогите отладить код, абсолютно ничего не понимаю.Задание-Удалить из списка k-й по порядку...

Из двумерного массива удалить строку, содержащую максимальный элемент
Здравствуйте! Нужна программа , которая будет из двумерного массива удалять строку ,содержащую...

Удалить каждый третий элемент из списка
Написать прогу создания и обработки списка(беда), каждый элемент которого ссылается на предыдущий и...

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


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

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