• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задачка по спискам в СИ помогите

  • Автор темы Автор темы zorin
  • Дата начала Дата начала

zorin

Ученик
Регистрация
15 Дек 2009
Сообщения
1
Реакции
0
Баллы
0
Задачка по спискам в СИ помогите

Пожалуйста помогите сделать задачку! в СИ
Дан список чисел, поделить его на два списка по четности, в четном списке отсортировать числа по убыванию, в нечетном по возрастанию.На экран вывести исходный список и два получившихся.

P.S. Есть задачка с такой же сортировкой, но она делает это в одном списке.

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct item
{int a;
struct item *next;
};
struct item *form()//formirovanie spiska
{
int n;
struct item *head=NULL, *cur, *tmp;
do
{
printf("Input n from 0 to 100\n");
scanf("%d",&n);
printf("Input spisok\n");
} while (n<0&& n>100);
while (n-->0)
{
tmp=malloc(sizeof(struct item));
scanf("%d",&tmp->a);
tmp->next=NULL;
if (!head)
head=tmp;
else cur->next=tmp;
cur=tmp;
}
return head;
}
void print(struct item *p)
{
for (;p;p=p->next)
printf("%d",p->a);
printf("\n");
}
void del(struct item *p)
{
struct item *tmp;
while (p)
{
tmp=p;
p=p->next;
free(tmp);
}
}
struct item *work(struct item *p){
struct item *head=NULL, *cur,*tmp,*q,*g;
int k_chet=0, k_nech=0,temp,i,j;
for (q=p;q;q=q->next)
if (!(q->a % 2)){
tmp=malloc(sizeof(struct item));
tmp->a=q->a;
tmp->next=NULL;
if (head)
cur->next=tmp;
else
head=tmp;
cur=tmp;
k_chet++;
}
for (q=p;q;q=q->next)
if (q->a % 2){
tmp=malloc(sizeof(struct item));
tmp->a=q->a;
tmp->next=NULL;
if (head)
cur->next=tmp;
else
head=tmp;
cur=tmp;
k_nech++;
}
for (i=1;i<100;i++)
{
j=1;
for (q=head;j<k_chet;j++,q=q->next​)
if(q->a <q->next -> a){
temp=q->a;
q->a=q->next->a;
q->next->a=temp;
}
}
printf("\n");
for (i=1;i<100;i++)
{
j=0;
for (q=head;j<k_chet;j++,q=q->next​);
for (;j<k_nech;j++,q=q->next)
if (q->a>q->next->a){
temp=q->a;
printf("%d\n",temp);
q->a=q->next->a;
q->next->a=temp;
}
}
return head;
}
int main()
{
struct item *ish,*rez;
ish=form();
print(ish);
rez=work(ish);
print(rez);

del(rez);
del(ish);
return 0;
}
 
Последнее редактирование:
Назад
Сверху