![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Nikgamer |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Продвинутые Сообщений: 9 Регистрация: 22.4.2010 Город: Novosibirsk ![]() |
Привет. Вот дали на мою голову такую задачку, с условием, что реализую на СИ (без ++-ов). Задача формулируется так. На вход подается произвольное кол-во натуральных чисел (не по порядку, с повторами etc.). Нужно, используя односвязный список, отсортировать эти числа по возрастанию, удалить повторы и распечатать, собственно, получившийся список.
Ну-с, проблемы с реализацией. Ниже будет приаттачен мой индусский быдлокод. Вопросов 2. Первый - правильно ли сортируется? Второй - как реализовать печать? Код #include <stdio.h> #include <stdlib.h> int main () { int a; struct list {int data; struct list *next;}; struct list *h, *t, *p,*r,*c=NULL,*d; h=(struct list*)malloc(sizeof(struct list)); h->data=0; h->next=NULL; while (scanf("%d", &a)==1){ p=(struct list*)malloc(sizeof(struct list)); p->data=a; p->next=NULL; if(h->data==0){ h->data=p->data; continue; } if(p->data<h->data){ p->next=h; h=p; } if(p->data>h->data){ for(t=h;t->next!=NULL;t=t->next){ if(p->data<t->next->data){ c=t->next; t->next=p; p->next=c; } } t->next=p; } } return 0; } |
![]() ![]() |
Vahappaday |
![]()
Сообщение
#2
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
мой цикл надо ставить после Вашего, то есть вот так:
Код while (scanf("%d", &a)==1){...} И нужно предусмотреть конец ввода. Я завершал ввод, когда это отлаживал, комбинацией Ctrl+Z, но можно, например, выходить из цикла при a=0 или -1.while(h) {...} |
Nikgamer |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Продвинутые Сообщений: 9 Регистрация: 22.4.2010 Город: Novosibirsk ![]() |
мой цикл надо ставить после Вашего, то есть вот так: Код while (scanf("%d", &a)==1){...} И нужно предусмотреть конец ввода. Я завершал ввод, когда это отлаживал, комбинацией Ctrl+Z, но можно, например, выходить из цикла при a=0 или -1.while(h) {...} Спасибо вам за помощь. Все заработало, теперь вот размышляю, что скажет препод об обязательном нажатии определенной комбинации при конце ввода, но да это как-нибудь утрясется, может я это дело в файл запихаю. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 29.5.2025, 4:01 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru