Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
#1

Удаление максимального элемента из списка с предыдущим элементом - C++

24.04.2013, 00:57. Просмотров 711. Ответов 1
Метки нет (Все метки)

Удаление максимального элемента из списка с предыдущим элементом
Вот набросок программы, который удаляет максимальный элемент. Подскажите пожалуйста, как организовать удаление предыдущего элемента
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct List
{
    int data;
    List *next;
    List *prev;
};
List *AddLast(List *begin, int a);
List *Make_List(int n)
{
    List *first=NULL;
int a;
for(int i=0;i<n;i++)
 {
    cin>>a;
    first=AddLast(first,a);
 }
return first;
};
 
List *AddLast(List *begin, int a)//добавление элементов в конец
{
if (begin==NULL)
{begin=new List;
begin->data=a;
begin->next=NULL;
begin->prev=NULL;
    return begin;}
else
    {
    List *current =begin;
    while (current->next!=NULL)
    current=current->next;
    List *Add=new List;
    Add->data=a;
    Add->next=NULL;
    Add->prev=current;
    current->next=Add;
    return begin;}
    }
void Print_List(List*first)//вывод списка
    { 
    if(first==NULL)
    cout<<"Список пуст";
    else
    {
    List *current=first;
while (current!=NULL)
{cout<<current->data<<" ";
current=current->next;
}}
cout<<endl;
}
 
 
int search_max(List *begin)//поиск макс. элемента
{
    
    List *current=begin;
    int max=current->data;
    while(current!=NULL)
    {
        if(current->data>max)
         max=current->data;
         current=current->next;
    }
    return max;
}
 
List *Delete(List *begin, int max_l)//удаление макс. элемента
{
    if (begin!=NULL)
      {
          if(begin->data==max_l)
          {
              List *current=begin;
              
              begin=begin->next;
              
              
              
              delete current;
              //delete previous;
              return begin;
          }
          else 
          {
              List *current=begin;
              while ((current!=NULL)&&(current->data!=max_l))
              current=current->next;
              if(current!=NULL)
              {
                  current->prev->next=current->next;
                  if (current->next!=NULL)
                  (current->next)->prev=current->prev;
                  delete current;
                  return begin;
              }
              
          }
      }
}
 
 
int main()
{
    List *begin=NULL;
    int option;
 int n;
 int max_l;
 
cout<<"1-заполнить список\n";
cout<<"2-вывод списка\n";
cout<<"3-удаление\n";
 while(1)
 
 {
     cout<<"Введите команду: ";
     cin>>option;
     switch (option)
     {
         case 1:
 cout<<"введи количество элементов: ";
 cin>>n;
 begin=Make_List(n);
         break;
         case 2:
 Print_List(begin);
         break;
         case 3:
 max_l=search_max(begin);
 //cout<<"max element"<<max_l;
         begin=Delete(begin,max_l);
         cout<<"максимальный элемент удалён\n";
         break;
     }
 }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2013, 00:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление максимального элемента из списка с предыдущим элементом (C++):

Удаление максимального элемента списка - C++
Есть двусвязный список, нужно удалить в нем максимальный элемент. Подскажите, где ошибка. class Spisok { struct Entry { ...

Вычислить номер максимального элемента массива и произведение между первым и вторым нулевым элементом - C++
Есть массив из вещественных чисел. Нужно: 1. вычислить номер максимального элемента 2. вычислить произведение между первым и вторым...

Реализация списка.Удаление хвостового элемента.Поиск элемента - C++
Всем привет,мое задание выглядит так : В класс List&lt;T&gt; из классной работы добавить следующие методы: void addHead(T...

Нахождение максимального элемента списка - C++
Есть код: // ConsoleApplication1.cpp : Defines the entry point for the console application. // #include &quot;stdafx.h&quot; #include...

Удаление элемента списка и всего списка - C++
Компилируется, но не работает. Что и как исправить? #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;cstring&gt; #define M 5 ...

Удаление элемента из списка и поиск элемента - C++
Нужно удалить определенный элемент из списка. Найти элемент в списк и вывести на него всю информацию. Вот код. Не знаю как написать...

1
tadom
13 / 13 / 0
Регистрация: 28.03.2013
Сообщений: 22
24.04.2013, 11:29 #2
Цитата Сообщение от Ilnurvampire Посмотреть сообщение
с предыдущим элементом
Ето елемент в которого
1)индекс меньше на 1 чем максимального;
2)он просто меньший от максимального и больше все остальних?
для (1):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
     switch (option)
     {
         case 1:
 cout<<"введи количество элементов: ";
 cin>>n;
 begin=Make_List(n);
         break;
         case 2:
 Print_List(begin);
         break;
         case 3:
 max_l=search_max(begin);
 //cout<<"max element"<<max_l;
         begin=Delete(begin,max_l);
         begin = Delete(begin,max_l - 1);
         cout<<"максимальный и предыдущий элемент удалён\n";
         break;
     }
для (2):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     switch (option)
     {
         case 1:
 cout<<"введи количество элементов: ";
 cin>>n;
 begin=Make_List(n);
         break;
         case 2:
 Print_List(begin);
         break;
         case 3:
 max_l=search_max(begin);
 //cout<<"max element"<<max_l;
         begin=Delete(begin,max_l);
          max_l=search_max(begin);//еще раз, но только теперь предыдущий
         begin=Delete(begin,max_l);
         cout<<"максимальный и предыдущий элемент удалён\n";
         break;
     }
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2013, 11:29
Привет! Вот еще темы с ответами:

Структура: Организовать поиск элемента и проверку на совпадение его с минимальным элементом списка. - C++
Задачи программы. На входе задано линейный список М из n целых чисел. Известно, что большинство элементов этого списка равны нулю....

После максимального элемента списка L вставить заданный элемент a. - C++
1) После максимального элемента списка L вставить заданный элемент a. 2) Для заданного бинарного дерева поиска проверить условие: •...

После максимального элемента списка L вставить заданный элемент a. - C++
После максимального элемента списка L вставить заданный элемент a. Добавлено через 4 часа 7 минут В книге Герберта Шилдта списков...

Перенос в начало списка его максимального элемента, а в конец минимальный - C++
нужно написать функцию,которая переносит в начало непустого списка L его максимальный элемент а в конец минимальный.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru