Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2017, 20:33   #1
Fronzi
Пользователь
 
Регистрация: 11.03.2017
Сообщений: 23
По умолчанию Списки C++

Напишите функцию для поиска максимальных элементов в списке.
Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale>

using namespace std;

struct element //Структура с инфополями и адресным полем
{
 int x; //Инфополе. значения из x будут передаваться в список
 element *Next; //Адресное поле
};
class List //Класс Список
{
 element *Head; //Указатель на последний активный элемент или просто голова списка
 public:
  List() {Head=NULL;} //Конструктор и инициализация указателя пустым значением
 ~List(); //Деструктор. Далее он вынесен за класс
 void Add(int x); //Функция для добавления значений в список
 void Show(); //Функция для отображения списка на экране
 void Max(int x); //Функция для максимального значения
};
 List::~List() //Деструктор вынесен за класс
{
    while (Head!=NULL)  //Пока по адресу не пусто 
     {    
        element *temp=Head->Next; //Временная переменная для хранения адреса следующего элемента
        delete Head; //Освобождаем адрес обозначающий начало
        Head=temp; //Меняем адрес на следующий
     }
}
 void List::Add(int x) //Функция добавления элементов в список
{
 element *temp=new element; //При каждом вызове выделяется память
temp->x=x; //Записываем x в элемент структуры  element (в x структуры element)
temp->Next=Head; //Указываем, что след. элемент это объект по адресу Head
Head=temp; //Указываем, что последний активный элемент это только что введенный
}
void List::Show() //Функция отображения списка на экране
{
  element *temp=Head; //Определяем указатель, который изначально он равен адресу начала списка
 
 
 while (temp!=NULL) //До тех пор пока не встретит пустое значение
 {
  cout<<temp->x<<" "; //Выведет элемент x из списка
  temp=temp->Next; //Указываем, что далее нам нужен следующий элемент
 }
} 

int _tmain(int argc, _TCHAR* argv[])
{setlocale (LC_ALL, "rus");
 
  int N; //Число элементов в список
  int x; //Элементы вводимые в список
  List lst; //Переменная, тип которой список
 
   cout<<"Введите количество элементов списка, N= ";cin>>N; //Указали сколько элементов вводить в список
 
for (int i=0;i<N;i++)
 {
	 x = rand() % 10; //Рандом
  //cout<<i+1<<". x = "; //Ввод x с клавиатуры
  lst.Add(x); //Добавление элемента в список
 }
 cout << "Список: ";
lst.Show(); //Вывод списка на экран

 _getch();
	return 0;
}
Fronzi вне форума Ответить с цитированием
Старый 22.04.2017, 20:39   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И? Вопрос-то в чем?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.04.2017, 20:41   #3
Fronzi
Пользователь
 
Регистрация: 11.03.2017
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И? Вопрос-то в чем?
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И? Вопрос-то в чем?
я не могу функцию поиска максимального написать, код приложил, чтобы видно было как список задавал.
Fronzi вне форума Ответить с цитированием
Старый 22.04.2017, 20:46   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

а в чем проблема? берете p = Head и пока не nullptr делаете обычный поиск максимума в массиве, только вместо ++i делаете p = p->next;
p51x вне форума Ответить с цитированием
Старый 22.04.2017, 20:59   #5
Fronzi
Пользователь
 
Регистрация: 11.03.2017
Сообщений: 23
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
и пока не nullptr
а что это?
получается так?
Код:
void List::Max(int x)
{
 element p = *Head;
 element max = p;
 while (//nullptr?)
 {
	 if (x>p)
		 x=max;
	 p=p->next;
 }
 return x;
}
Fronzi вне форума Ответить с цитированием
Старый 22.04.2017, 21:06   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

nullprt - это означает, что ссылка (не ссылка, а указатель) текущего элемента списка ссылается на null.
Примерно так:
Код:
while (curr->next != null) {};

Последний раз редактировалось Вадим Мошев; 22.04.2017 в 21:16.
Вадим Мошев вне форума Ответить с цитированием
Старый 22.04.2017, 21:14   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не ссылка, а указатель.

nullptr это ключевое слово с С++11. До него либо 0, либо макросы типа NULL.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.04.2017, 21:17   #8
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не ссылка, а указатель.
Спасибо, что поправил.
Вадим Мошев вне форума Ответить с цитированием
Старый 22.04.2017, 21:21   #9
Fronzi
Пользователь
 
Регистрация: 11.03.2017
Сообщений: 23
По умолчанию

Я вроде ссылаюсь на нужный элемент, но он видит ошибки в указателях, что я не так делаю?
Fronzi вне форума Ответить с цитированием
Старый 22.04.2017, 21:22   #10
Fronzi
Пользователь
 
Регистрация: 11.03.2017
Сообщений: 23
По умолчанию

[QUOTE=Fronzi;1677032]Я вроде ссылаюсь на нужный элемент, но он видит ошибки в указателях, что я не так делаю?


а когда добавляю указатель, выдает ошибку, что вместо -> нужно использовать =
Fronzi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки anikev Паскаль, Turbo Pascal, PascalABC.NET 4 09.04.2013 05:12
Списки sabika Помощь студентам 0 02.12.2009 18:54
Списки AnnNet Microsoft Office Excel 5 23.11.2009 20:29
Списки ANG3 Microsoft Office Word 4 22.11.2009 21:00