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

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

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

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

14.09.2013, 20:46. Просмотров 1088. Ответов 11
Метки нет (Все метки)

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

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++
Нахождение минимального элемента в строке матрицы C++
C++ Рекурсия: нахождение минимального элемента массива
C++ Матрицы,нахождение максимального и минимального элемента
C++ Нахождение минимального элемента массива. Перевести с Паскаля на С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 665
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.09.2013, 11:59     Нахождение минимального элемента в стеке #4
Это стек?
Bishoper
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
25.09.2013, 12:02  [ТС]     Нахождение минимального элемента в стеке #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Это стек?
Ну вроде как да, а что не так?
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
25.09.2013, 12:42     Нахождение минимального элемента в стеке #8
мне любопытно а как можно находить минимум и максимум вообще не используя конструкции иф?
ведь надо же как-то их сравнивать.
или имеется в виду использовать вместо иф какие либо функции сортировки или сравнения. Так а смысл, если иф более оптимален?
Bishoper
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
26.09.2013, 10:35  [ТС]     Нахождение минимального элемента в стеке #9
Цитата Сообщение от HedgehogLu Посмотреть сообщение
мне любопытно а как можно находить минимум и максимум вообще не используя конструкции иф?
ведь надо же как-то их сравнивать.
или имеется в виду использовать вместо иф какие либо функции сортировки или сравнения. Так а смысл, если иф более оптимален?
Вот я и хочу сделать через if, только я не вообще не понимаю эти стеки и очереди, точнее только местами.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 665
Завершенные тесты: 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++
Поиск наибольшего элемента и сортировка в стеке C++
Вычислить произведение P = Хmin*Ymin минимального элемента xmin = min{xi} массива xi и минимального элемента ymin = min{yi} массива yi C++

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

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

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

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