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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2011, 19:33   #1
greend
Новичок
Джуниор
 
Регистрация: 14.10.2011
Сообщений: 2
Печаль Ошибка в сортировке списка

Собственно, проблема такая. Писал список по структуре "номер, имя, фамилия". чтобы не мучаться с именами решил сделать сортировку по номеру телефона и добавил соответствующее поле в структуру. В итоге программа не работает (работала до попыток сделать сортировку)
Код:
typedef struct _LIST_ENTRY *PLIST_ENTRY;

typedef struct _LIST_ENTRY
{
	int a;
	char* name;
	char* lname;
	int phone;
	PLIST_ENTRY next;

} list_entry, *PLISTENTRY;

int main()
{
	PLIST_ENTRY x, y = 0;
	int f, n, b, k, i = 1;
	int m;
	char z;
	printf("enter number of characters: \n");
	scanf("%d", &n);

	for (; i <= n; i++)
	{
		x = (PLIST_ENTRY) malloc(sizeof(list_entry));
		x->a+= i;
		printf("enter %d character's name: ", i);
		scanf("%s", x->name);
		printf("enter %d character's last name: ", i);
		scanf("%s", x->lname);
		printf("enter %d character's phone: ", i);
		scanf("%d", &x->phone);
		x->next = y;
		y = x;
	}
	printf("\nentered table: \n");
	for (x = y, b = x->a; x != 0; x = x->next, b--)
	{
		printf
			("\nnum: %d; name: %s; last_name: %s; phone_num: %d\nnext=%0.8X\n",
			 b, x->name, x->lname, x->phone, x->next);
	}
	printf("sorted by phone: \n");

	for (i = 0; i < n; i++)
	{
		for (k = 0; k < n - i; k++)
		{
			if (x->phone > x->next->phone)
			{
				m = x->phone;
				x->phone = x->next->phone;
				x->next->phone = m;
				z = x->name;
				x->name = x->next->name;
				x->next->name = z;
				z = x->lname;
				x->lname = x->next->lname;
				x->next->lname = z;
			}
			else
				printf("nothing to sort!\n");
			x = y;
			for (f = 0; f < k; f++)
				x = x->next;
		}
		x = y;
		for (k = 0; k < i; k++)
			x = x->next;
	}
	for (x = y, b = x->a, b -= 1, i = 1; x != 0; x = x->next, b--)
	{
		printf
			("\nnum: %d; name: %s; last_name: %s; phone_num: %d\nnext=%0.8X\n",
			 b, x->name, x->lname, x->phone, x->next);
	}
	free(x);
	return 0;
}
greend вне форума Ответить с цитированием
Старый 15.10.2011, 02:55   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Советую всё запихнуть в vector или list. А там уже sort вызвать. Это если вам не обязательно использовать самописные структуры.
TwiX вне форума Ответить с цитированием
Старый 15.10.2011, 09:25   #3
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от greend Посмотреть сообщение
Код:
			if (x->phone > x->next->phone)
			{
				m = x->phone;
				x->phone = x->next->phone;
				x->next->phone = m;
				z = x->name;
				x->name = x->next->name;
				x->next->name = z;
				z = x->lname;
				x->lname = x->next->lname;
				x->next->lname = z;
			}
Так связные списки не сортируют... При сортировке связного списка затрагиваются лишь указатели на элементы (на структуру) списка, а поля с данными при сортировке не затрагиваются.
An1ka вне форума Ответить с цитированием
Старый 15.10.2011, 16:50   #4
greend
Новичок
Джуниор
 
Регистрация: 14.10.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Советую всё запихнуть в vector или list. А там уже sort вызвать. Это если вам не обязательно использовать самописные структуры.
Именно самописные..) а так бы я думаю нашел бы решение

Цитата:
Сообщение от An1ka Посмотреть сообщение
Так связные списки не сортируют... При сортировке связного списка затрагиваются лишь указатели на элементы (на структуру) списка, а поля с данными при сортировке не затрагиваются.
странно, но одногрупник делал именно так. Я сделал по образу и подобию..
greend вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при сортировке Chikanog Microsoft Office Access 2 05.01.2011 13:08
Ошибка в сортировке слиянием voice8787 Общие вопросы C/C++ 0 05.12.2010 20:56
Где ошибка в сортировке? vaan.sk Общие вопросы C/C++ 1 16.03.2010 23:33
Ошибка в сортировке линейного списка, помогите пожалуйста найти Loginanton Паскаль, Turbo Pascal, PascalABC.NET 2 31.12.2008 15:01
Ошибка в сортировке Veiron Общие вопросы Delphi 14 21.01.2008 21:35