Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 02.06.2015, 19:16   #1
Арий
Новичок
 
Регистрация: 02.06.2015
Сообщений: 3
Репутация: 10
По умолчанию Сортировка в однонаправленном списке.С++

Нужна сортировка по цене. Не знаю, как осуществить.Помогите!!!


Код:

struct Book
{

	char name[50]; //Название книги
	char athor[50]; //Фамилия автора
	char country[50]; //страна выпуска
	int year; //год издания
	int price;// цена
	
	void Input(Book &book);  //Функция ввода данных в структуру 
	Book *Next; //Адрес на следующий элемент


};


class List
{
	Book *Head; //Указатель на начало списка
public:
	List() :Head(NULL){}; //Конструктор по умолчанию (Head=NULL)
	~List();//Деструктор
	
	void Add(Book &book);
	void Sort();
	void Show();
	void clear();
	void Del();
};

/*ФУНКЦИЯ ЗАПОЛНЕНИЯ ДАННЫХ ПО КНИГЕ*/
void Book::Input(Book &book)
{
	cin.ignore(cin.rdbuf()->in_avail());
	cout << "Название книги: "; cin.getline(name, 50);
	cin.ignore(cin.rdbuf()->in_avail());
	cout << "Автор: "; cin.getline(athor, 50);
	cin.ignore(std::cin.rdbuf()->in_avail());
	cout << "Страна издания: "; cin.getline(country, 50);
	cin.ignore(std::cin.rdbuf()->in_avail());
	cout << "Цена: "; cin >> price;
	cout << "Год: "; cin >> year;
}

List::~List() //Деструктор класса List
{
	while (Head != NULL) //Пока по адресу есть хоть что-то
	{
		Book *temp = Head->Next; //Сразу запоминаем указатель на адрес следующего элемента структуры
		delete Head; //Освобождаем память по месту начала списка
		Head = temp; //Меняем адрес начала списка
	}
}

/*ФУНКЦИЯ ДОБАВЛЕНИЯ НОВОЙ СТРУКТУРЫ В СПИСОК*/
void List::Add(Book &book)
{
	Book *temp = new Book; //Выделение памяти под новую структуру
	temp->Next = Head; //Указываем, что адрес следующего элемента это начало списка

	//Копирование содержимого параметра book в только что созданную переменную
	strcpy_s(temp->name, book.name);
	strcpy_s(temp->athor, book.athor);
	strcpy_s(temp->country, book.country);
	temp->year = book.year;
	temp->price = book.price;


	Head = temp; //Смена адреса начала списка


}


int main()
{

	setlocale(LC_ALL, "Russian");
	Book book; //Обяъвили переменную, тип которой Книга
	 int N;  //Объявили переменную - число книг
	List lst; //Объявили переменную типа Список. Она выступает как контейнер данных

	cout << "введите количество книг: "; cin >> N; //Ввели число книг
    cin.ignore(); //Игнорируем клавишу Enter



	for (int i = 0; i < N; i++)
	{
		book.Input(book); //Передаем в функцию заполнения переменную книга
		lst.Add(book); //Добавляем заполненную структуру в список

	}


	lst.Show(); //Показываем список на экране 


	system("PAUSE");
}


/*ФУНКЦИЯ КЛАССА LIST ДЛЯ ВЫВОДА СПИСКА НА ЭКРАН*/
void List::Show()
{
	Book *temp = Head; //Объявляем указатель и изначально он указывает на начало
	ofstream fout("book.xls", ios_base::out);


	while (temp != NULL) //Пока по адресу на начало хоть что-то есть
	{
		//Выводим все элементы структуры
		cout << temp->name << "  "; //Вывод названия
		cout << temp->athor << "  "; //Вывод фамилии автора
		cout << temp->country << "  "; //Вывод страны
		cout << temp->year << "  "; //Вывод года
		cout << temp->price << endl; // Вывод цены
		fout << temp->name << "\t"; //Вывод названия
		fout << temp->athor << "\t"; //Вывод фамилии автора
		fout << temp->country << "\t"; //Вывод страны
		fout << temp->year << "\t"; //Вывод года
		fout << temp->price << endl;
		temp = temp->Next; //Указываем на следующий адрес из списка

	}


	fout.close();

	ifstream fin("book.xls", ios::in);
	if (!fin.is_open()) // если файл не открыт
		cout << "Файл не может быть открыт!\n"; // сообщить об этом
	else
	{
		cout << "........................................................" << endl;
		cout << "Чтение из файла..." << endl;
		cout << fin.rdbuf() << endl;
	}
	fin.close();

}


Последний раз редактировалось Арий; 02.06.2015 в 20:10.
Арий вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка char в двусвязном списке preanik Помощь студентам 0 12.05.2013 02:18
Проблемы с удалением элемента в однонаправленном линейном списке. ivan.tiran Общие вопросы C/C++ 3 24.04.2013 22:29
Работа с циклическим однонаправленном списком в С++ (Borland C++ 3.1) Karina2 Помощь студентам 1 26.05.2011 17:35
Сортировка в списке Uroboros Помощь студентам 17 18.01.2011 23:04


01:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru