Member 13517187 Ответов: 1

Создайте связанный список для хранения имени, даты рождения, роста, веса и быстрой сортировки по дате


я опубликовал свой вопрос пожалуйста посмотрите вперед и отладьте его

Что я уже пробовал:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {int date; int month; int year;}DOB;
struct data{int num;char name[64]; DOB birth;int height; float weight;struct data *previous;struct data *next;};
void scan(struct data *a)
{
    if(a!=0)
    {
        scanf("%s %2d %2d %04d %4d %f",a->name,&((a->birth).date),&((a->birth).month),&((a->birth).year),&(a->height),&(a->weight));
        scan(a->next);
    }
    else
        return ;
}
void print(struct data *a)
{
     if(a!=0)
    {
        printf("%s %02d%02d%04d %04d %.2f \n",a->name,((a->birth).date),((a->birth).month),((a->birth).year),(a->height),(a->weight));
        print(a->next);
    }
    else
        return ;
}
void swap(struct data *a,struct data *b)
{
   struct data temp;
   strcpy(temp.name,a->name);
   ((temp.birth).date)=((a->birth).date);
   ((temp.birth).month)=((a->birth).month);
   ((temp.birth).year)=((a->birth).year);
   (temp.height)=(a->height);
   (temp.weight)=(a->weight);
   strcpy(a->name,b->name);
   ((a->birth).date)=((b->birth).date);
   ((a->birth).month)=((b->birth).month);
   ((a->birth).year)=((b->birth).year);
   (a->height)=(b->height);
   (a->weight)=(b->weight);
   strcpy(b->name,temp.name);
   ((b->birth).date)=((temp.birth).date);
   ((b->birth).month)=((temp.birth).month);
   ((b->birth).year)=((temp.birth).year);
   (b->height)=(temp.height);
   (b->weight)=(temp.weight);
}
int compare(struct data *x,struct data *y)
{
    if ((x->birth).year > ((y->next)->birth).year)
    {
        return 1;

    }
    else if((x->birth).year == ((y->next)->birth).year)
        {
            if ((x->birth).month > ((y->next)->birth).month)
            {
                 return 1;

            }
            else if((x->birth).month == ((y->next)->birth).month)
            {
                if ((x->birth).date > ((y->next)->birth).date)
                {
                    return 1;

                }
                else if((x->birth).date == ((y->next)->birth).date)
                {
                    return 0;
                }
                else
                    return -1;
            }
            else if((x->birth).month < ((y->next)->birth).month)
            {
                return -1;
            }
        }
        else if((x->birth).year < ((y->next)->birth).year)
        {
            return -1;
        }
}
struct data* partition(struct data *p,struct data *q)
{
    int i;
    struct data *x,*y=p,*temp=p;
    x=q;
    int a;

    for(i=y->num;i<x->num;i++)
    {
        a=compare(temp,x);
        if (a==-1||a==1)
        {
            swap(temp,y);
            temp=temp->next;
        }
    }
    swap(y,q);
    return y;
}
int quicksort(struct data *a,struct data *b)
{
    if(a->num >= b->num)
    {
        return 0;
    }
    struct data *pivot;
    pivot=partition(a,b);
    quicksort(a,pivot->previous);
    quicksort(pivot->next,b);
}
int main ()
{
    int n,i,j;
    struct data *head, *tail, *empty;
    printf("enter no. of entry you want\n");
    scanf("%d",&n);
    if(n==0)
        return 0;
    head= (struct data*)malloc(sizeof(struct data));
    empty=head;
    head->previous=0;
    head->num=1;
    for(i=0;i<n-1;i++)
    {

       tail=(struct data*)malloc(sizeof(struct data));
       tail->previous=empty;
       empty->next=tail;
       empty=tail;
       tail->num=i+2;

    }
    tail->next=0;
    scan(head);
    //print(head);
    quicksort(head,tail);
    print(head);
    return 0;

}

Dave Kreskowiak

Нет, вы отправили свою домашнюю работу и теперь умоляете кого-то исправить ее для вас.

Это не то, как работает этот сайт. Ты не заставишь кого-то сделать это за тебя. Ты ни черта не узнаешь, если мы это сделаем.

Опишите проблему, и вы получите указание в правильном направлении.

Patrice T

Вы должны изложить свою проблему.

1 Ответов

Рейтинг:
0

KarstenK

Ницца учебник по связанным спискам.

Прочитав его, вы должны понять мои дополнительные советы:

- создайте структуру для человека. Он должен включать DOB, имя и так далее.
- создайте также узловую структуру. Человек (данные) и до, и после. Если человек является указателем, то сортировка будет проще, но вы должны чем-то выделить и освободить память самостоятельно.
- напишите некоторые тестовые данные для отладки вашего кода
- сделайте некоторые отладочные выходные данные, чтобы понять, что происходит в вашем коде