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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2018, 10:44   #1
Ruslan99w
Новичок
Джуниор
 
Регистрация: 26.04.2018
Сообщений: 1
Смущение Cортировка однонаправленного списка С++

Нужно сделать так , чтобы сначала в списке шли журналы, затем газеты
Написал дичь, но все работает кроме сортировки интовая переменная данная для того чтобы различать что журнал а что газета

Код:
#include<iostream> 
#include<clocale>
#include<string>

using namespace std;

struct spis
{
	string name;
	int data;
	int cost;
	string journal;
	string newsp;
	spis *next;
} *node, *head, *temp;

void enter(spis *temp, /*spis *node,*/ spis *head)
{
	int j,k = 0;	
	cout << "Сколько элементов хотите добавить ?" << endl;
	cin >> j;
	head = NULL;
	while (k != j)
	{
		k++;
		cout << "Что вы хотите добавить газету или журнал?" << endl << "Для добавления газеты нажмите 1, для журнала 2" << endl;
		int a;
		cin >> a;
		if (a == 1)

		{
			cout << "Введите название и цену газеты" << endl;
			head = new spis;
			head->next = temp;
			head->data = 1;
			cin >> head->newsp;
			cin >> head->cost;
			temp->next = head;
			temp = temp->next;
			if (k == j)
			{
				temp->next =  NULL;
			}
		}
		
		else
		{
			{
				cout << "Введите  название и цену  журнала" << endl;
				head = new spis;
				head->next = temp;
				head->data = 2;
				cin >> head->journal;
				cin >> head->cost;
				temp->next = head;
				temp = temp->next;
			}
			if (k == j)
			{
				temp->next = NULL;
			}
		}
	}
	
}

void show(spis *temp, /*spis *node,*/ spis *head)
{
	spis *print = temp->next;
	while (print)
	{
		if(print->data==1)
			cout << "Название выпуска :" <<print->newsp << endl;
		if (print->data == 2)
		{
			cout << "Название выпуска :" << print->journal << endl;
		}
		cout << "Цена :" << print->cost << endl;
		print = print->next;
	}
}

void sort(spis *temp, /*spis *node,*/ spis *head)
{
	spis *s = temp->next;
	spis *h = temp->next;
	spis *t = temp->next;
	t = t->next;
	while (h)
	{
		if (h->data < t->data)
		{
			int i = h->data;
			h->data = t->data;
			t->data = i;
			string k = h->journal;
			h->journal = t->journal;
			t->journal = k;
			t = t->next;
			h = h->next; 
		}

	}
}

int main()
{
	setlocale(LC_CTYPE, "rus");
	temp = new spis;
	head = new spis;
	node = new spis;
	enter(temp,/* node, */ head);
	sort(temp, /*node, */ head);
	show(temp, /*node,*/ head);
	delete node, head, temp;
	system("pause");
}

Последний раз редактировалось Аватар; 26.04.2018 в 10:46.
Ruslan99w вне форума Ответить с цитированием
Старый 26.04.2018, 10:56   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Разберитесь с основами для начала.
0. зачем вам две переменные для названия? ведь, названия оно и есть название, хоть у журнала, хоть у газеты.
1. в мейне
Код:
head = new spis;
, в enter
Код:
head = NULL; ... head = new spis;
. Зачем выделять, если не используете? Почему не удаляете? Вообщем, утечка.
2. Т.к. head вы не сдвигаете и постоянно его создаете и пишите, то теряются и утекают все элементы, кроме последнего.
3. Зачем вообще нужен темп в мейне, причем не просто указатель, а выделенный? Зачем его передавать параметром везде?
4. У вас вроде как head указывает на список, а все остальные функции данные берут из темпа
5.
Код:
spis *print = temp->next;
	while (print)
А если только один элемент? Не надо распечатывать?
и т.д.

Кстати,
Код:
delete node, head, temp;
это явно не то, что вы думаете.

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


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация линейного однонаправленного списка dvpvitas Паскаль, Turbo Pascal, PascalABC.NET 1 08.11.2015 12:17
Создание однонаправленного списка С++ Арий Помощь студентам 1 04.06.2015 08:14
переворот однонаправленного списка ShockTrooper Помощь студентам 1 28.10.2012 22:16
Заполнение связного однонаправленного списка с++ Chelovekpredel Помощь студентам 1 07.10.2012 16:39
удаление циклического однонаправленного списка.. Yakoot Visual C++ 9 18.06.2011 20:05