Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
1

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

24.04.2013, 00:57. Просмотров 2055. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2013, 00:57
Ответы с готовыми решениями:

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

Поиск максимального нечетного элемента массива и перестановка с первым элементом
Помогите пожалуйста написать задачу найти max нечетный элемент вектора A и поменять его местами с...

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

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

1
13 / 13 / 6
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2013, 11:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Нахождение максимального элемента списка
Есть код: // ConsoleApplication1.cpp : Defines the entry point for the console application. // ...

Удаление максимального элемента со стека
Здравствуйте! нужна помощь с удалением максимального(самого большого) элемента со стека. функция...

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

Линейный однонаправленный список: удаление элемента перед первым положительным элементом
Есть функции для ввода и вывода списка, освобождения памяти. Проблема с функцией для удаления...


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

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

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