Сортировка односвязного списка - C (СИ) (73918)
Формулировка задачи:
Добрый день. Проблема, не знаю, с чем связана, сортирует нормально, все работает, но иногда программа вылетает, а в других функциях постоянно вылетает.
Может в указателях дело?
Но сортирует нормально.
Критует на этой команде(в других функциях, которые ее (sortnumbermag) вызывает)
Функция, в которой происходит крах и пух программы:
Функция addfirst:
Функция addlast:
void sortnumbermag()
/*Сортировка по номеру магазина*/
{
struct magazin *first;
struct magazin *last;
char famzaved[20], adress[20];
int nummag, numbermag;
int i=0;
while(1)
{
i=0;
first=ptr;
last=first->ptr_next;
for(;last!=NULL;last=last->ptr_next, first=first->ptr_next){
if(first->nummag > last->nummag) {
strcpy(famzaved,first->famzaved);
strcpy(first->famzaved,last->famzaved);
strcpy(last->famzaved,famzaved);
nummag = first->nummag;
first->nummag=last->nummag;
last->nummag=nummag;
strcpy(adress,first->adress);
strcpy(first->adress,last->adress);
strcpy(last->adress,adress);
numbermag = first->numbermag;
first->numbermag=last->numbermag;
last->numbermag=numbermag;
i|=1;
}
}
if(! i)
break;
};
}void newelementssort()
{
ptr = (struct magazin*) malloc(sizeof(struct magazin));
vvod();
printf("\n\n");
printf("\nВы ввели такие данные: \n");
printf("Фамилия: %s\n Номер магазина: %d\n Адрес магазина: %s\n Номер телефона: %d\n",ptr->famzaved,ptr->nummag,ptr->adress,ptr->numbermag);
ptr->ptr_next=NULL;
int answer;
do
{
printf_white();
puts("Куда хотите записать данные?(1-В Начало списка;2-В Конец списка)");
printf_normal();
scanf("%d",&answer);
if (answer==1)
{
addfirst();
showthelist();
sortnumbermag();
showthelist();
menu();
}
else if (answer==2)
{
addlast();
showthelist();
sortnumbermag();
showthelist();
menu();
}
}while(answer!=0);
}ptr->ptr_next = head_ptr; head_ptr = ptr;
struct magazin *p = head_ptr;
if (head_ptr == NULL)
{ // если список пуст,
addfirst(); // вставляем первый элемент
}
else
{
while (p->ptr_next) p = p->ptr_next; // ищем последний елемент
ptr->ptr_next = p->ptr_next; //(addafter)
p->ptr_next = ptr;Решение задачи: «Сортировка односвязного списка»
textual
Листинг программы
last=first->ptr_next