Форум программистов, компьютерный форум CyberForum.ru

Нахождение минимального элемента в стеке - C++

Восстановить пароль Регистрация
 
Bishoper
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
14.09.2013, 20:46     Нахождение минимального элемента в стеке #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
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
 
 
/*НАША СТРУКТУРА*/
struct List
{
    int x; //информационный элемент
    List *Next,*Head; //Голова стека и указатель на следующий элемент
};
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В СТЕК  (в список LIFO)*/
void Add(int x, List *MyList) //Принимаем элемент стека и указатель на стек, при этом говорим, что принимаемый указатель будет сам по себе указателем
{
    List *temp=new List; //Выделяем память для нового элемента
    temp->x=x; //Записываем в поле x принимаемый в функцию элемент x
    temp->Next=(*MyList)->Head; //Указываем, что следующий элемент это предыдущий
    (*MyList)->Head=temp; //Сдвигаем голову на позицию вперед
}
 
/*ФУНКЦИЯ ОТОБРАЖЕНИЯ СТЕКА*/
void Show(List *MyList) //Нужен только сам стек
{
    List *temp=new List; //Выделяем память под временный элемент
    temp=MyList->Head; //Указываем ему, что его позиция в голове стека
               //с помощью цикла проходим по всему стеку
    while (temp!=NULL)  //выходим при встрече с пустым полем
    {
        cout<<temp->x<<" "; //Выводим на экран элемент стека
        temp=temp->Next; //Переходим к следующему элементу
    }
}
 
/*ФУНКЦИЯ УДАЛЕНИЯ СТЕКА ИЗ ПАМЯТИ*/
void ClearList(List *MyList)
{   
     while (MyList->Head!=NULL)  //Пока по адресу не пусто
     {   
        List *temp=MyList->Head->Next; //Временная переменная для хранения адреса следующего элемента
        delete MyList->Head; //Освобождаем адрес обозначающий начало
        MyList->Head=temp; //Меняем адрес на следующий
     }
}
 
int main()
{
    List *MyList=new List; //Выделяем память для стека
    MyList->Head=NULL; //Во избежание ошибок инициализируем первый элемент
 
    for (int i=0;i<5;i++) Add(i,&MyList); //Заносим данные в стек
    Show(MyList); //Выводим стек на экран
 
void ClearList(List *MyList); //Очищаем память.
   system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 20:46     Нахождение минимального элемента в стеке
Посмотрите здесь:

Нахождение минимального элемента массива C++
C++ Матрицы в с++.Наведите пожалуйста элементарные примеры с ними (сложение,умножение,нахождение минимального/максимального элемента)
Нахождение минимального элемента в строке матрицы C++
Вычислить произведение P = Хmin*Ymin минимального элемента xmin = min{xi} массива xi и минимального элемента ymin = min{yi} массива yi C++
C++ Матрицы,нахождение максимального и минимального элемента
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
14.09.2013, 22:16     Нахождение минимального элемента в стеке #2
C++
1
2
3
4
5
6
7
8
temp=MyList->Head;
int minElem = temp->x;
temp=temp->Next;//это необязательно, просто первый мы уже типа обработали
    while (temp!=NULL)
    {
        minElem  = min(minElem, temp->x);
        temp=temp->Next;
    }
Ну, и отдельно обработать когда в списке элементов нет вообще, но это сам)
Bishoper
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
25.09.2013, 11:57  [ТС]     Нахождение минимального элемента в стеке #3
Нужно найти минимальный элемент через условные операторы if и else, и вывести в функции. Я пытался сделать без этих операторов, но что-то у меня не получилось.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,909
Записей в блоге: 2
Завершенные тесты: 1
25.09.2013, 11:59     Нахождение минимального элемента в стеке #4
Это стек?
Bishoper
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
25.09.2013, 12:02  [ТС]     Нахождение минимального элемента в стеке #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Это стек?
Ну вроде как да, а что не так?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,909
Записей в блоге: 2
Завершенные тесты: 1
25.09.2013, 12:12     Нахождение минимального элемента в стеке #6
Цитата Сообщение от Bishoper Посмотреть сообщение
Ну вроде как да, а что не так?
Как минимум название какое-то странноватое для стека. Так же зачем в узле стека(списка) хранить указатель на голову?
C++
1
List *Next,*Head; //Голова стека и указатель на следующий элемент
Далее утечка памяти тут:
C++
1
2
3
4
void Show(List *MyList) //Нужен только сам стек
{
    List *temp=new List; //Выделяем память под временный элемент
    temp=MyList->Head; //Указываем ему, что его позиция в голове стека
и тут тоже:
C++
1
2
3
4
void Min(int min,List *MyList)
{
     List *temp=new List;
temp=MyList->Head;
SatanaXIII
25.09.2013, 12:17
  #7
 Комментарий модератора 
Пункт 5.5 Правил.
Bishoper, прекратите дублировать темы.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
25.09.2013, 12:42     Нахождение минимального элемента в стеке #8
мне любопытно а как можно находить минимум и максимум вообще не используя конструкции иф?
ведь надо же как-то их сравнивать.
или имеется в виду использовать вместо иф какие либо функции сортировки или сравнения. Так а смысл, если иф более оптимален?
Bishoper
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
26.09.2013, 10:35  [ТС]     Нахождение минимального элемента в стеке #9
Цитата Сообщение от HedgehogLu Посмотреть сообщение
мне любопытно а как можно находить минимум и максимум вообще не используя конструкции иф?
ведь надо же как-то их сравнивать.
или имеется в виду использовать вместо иф какие либо функции сортировки или сравнения. Так а смысл, если иф более оптимален?
Вот я и хочу сделать через if, только я не вообще не понимаю эти стеки и очереди, точнее только местами.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
26.09.2013, 11:21     Нахождение минимального элемента в стеке #10
C++
1
if (temp->x < minElem) minElem = temp->x;
епт...
Bishoper
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
26.09.2013, 11:34  [ТС]     Нахождение минимального элемента в стеке #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Как минимум название какое-то странноватое для стека. Так же зачем в узле стека(списка) хранить указатель на голову?
C++
1
List *Next,*Head; //Голова стека и указатель на следующий элемент
Далее утечка памяти тут:
C++
1
2
3
4
void Show(List *MyList) //Нужен только сам стек
{
    List *temp=new List; //Выделяем память под временный элемент
    temp=MyList->Head; //Указываем ему, что его позиция в голове стека
и тут тоже:
C++
1
2
3
4
void Min(int min,List *MyList)
{
     List *temp=new List;
temp=MyList->Head;
Ну не знаю, препод ничего не сказал насчёт утечек памяти, он просто сказал, что нужно использовать if и else, а насчёт "стека" он ничего не возразил
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2013, 12:13     Нахождение минимального элемента в стеке
Еще ссылки по теме:

C++ Нахождение минимального элемента массива. Перевести с Паскаля на С++
Поиск наибольшего элемента и сортировка в стеке C++
Нахождение максимального и минимального элемента в списке C++

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

Или воспользуйтесь поиском по форуму:
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.09.2013, 12:13     Нахождение минимального элемента в стеке #12
видимо он не заморачивался
т.к. смотри
Цитата Сообщение от Bishoper Посмотреть сообщение
List *temp=new List; //Выделяем память под временный элемент
возражений нет получили указатель ссылающийся на новый элемент списка (т.е память под него выделена, а надо или нет это уже заморочка программиста )

Цитата Сообщение от Bishoper Посмотреть сообщение
temp=MyList->Head; //Указываем ему, что его позиция в голове стека
- а вот тут утечка
Т.к. указателю передаем адрес начала списка, при этом старый адрес указатель забывает. и он нигде не используется уже полюбому, т.к. мы просто не знаем каким он был. Соответственно при всем своем желании мы уже не освободим память, т.к. просто не знаем адреса.
Yandex
Объявления
26.09.2013, 12:13     Нахождение минимального элемента в стеке
Ответ Создать тему
Опции темы

Текущее время: 15:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru