链表排序
谁能告诉我它为什么没有输出?超出时限写一个结构体变量(包括年月日),输入N个年/月/日信息,用链表保证其有序,在输入一个k,最后输出第k天,即给定输入的时间最早的第k天。
输入格式
第一行输入一个整数N,表示给定的天数。
接下来N行,每行给出形如YYYY/MM/DD的格式,代表YYYY年MM月DD日。(例如:1991/06/21,0123/02/01)
最后一行一个整数K(1<=K<=N),如题所述。
输出格式
仅一行,输出给定的日子里面第K早之日,输出格式与输入格式相同。
样例输入
4
1937/05/23
1991/02/15
1946/10/30
1999/06/09
2
样例输出
1946/10/30
#include<stdio.h>
#include<stdlib.h>
#define len sizeof(struct s)
struct s
{
char year[4];
char month[4];
char day[4];
struct s * next;
};
int main ()
{
int n,t,i,k;
char ch='/';
struct s *p1,*p2,*q1,*q2,*r;
struct s *head,*head1;
scanf("%d",&n);
t=0;
p1=(struct s*)malloc(len); //创建链表
p2=p1;
scanf("%s%c%s%c%s",p1->year,&ch,p1->month,&ch,p1->day);
head=NULL;
while(t<=n)
{
t++;
if(t==1)
head=p1;
else
p2->next;
p2=p1;
p1=(struct s*)malloc(len);
scanf("%s%c%s%c%s",p1->year,&ch,p1->month,&ch,p1->day);
}
p2->next=p1;
p1->next=NULL;
head1=(struct s*)malloc(len); //创建新链表,每一次在旧链表中找最大的日子,插在有空表头的新链表中,
head1->next=NULL;
t=n; //每次的最大日都插在新链表的空表头之后,
while(t>0)
{
p1=p2=head; //得新链表从小到大排列
q1=q2=head;
while(p1!=NULL)
{
if((p1->year>q1->year)||(p1->year==q1->year&&p1->month>q1->month)||(p1->year==q1->year&&p1->month==q1->month&&p1->day>q1->day))
{
q2=p2; //找最大日
q1=p1;
}
}
if(q1==head) //最大日在表头
{
q2=head->next;
head->next=head1->next;
head1->next=head;
head=q2;
}
else //最大日在表中
{
q2->next=q1->next;
q1->next=head1->next;
head1->next=q1;
}
t--;
}
r=head1; // 输出新链表的第K个
for(i=0;i<k;i++)
r=r->next;
printf("%s/%s/%s\n",r->year,r->month,r->day);
printf("\n");
return 0;
}