| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题:链表排序
取消只看楼主 加入收藏
双子若尘
Rank: 1
来 自:福州
等 级:新手上路
帖 子:21
专家分:0
注 册:2012-12-13
结帖率:100%
收藏
已结贴  问题点数:9 回复次数:1 
链表排序
谁能告诉我它为什么没有输出?超出时限



写一个结构体变量(包括年月日),输入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;
}

搜索更多相关主题的帖子: 结构体 年月日 时间 
2013-01-06 19:29
双子若尘
Rank: 1
来 自:福州
等 级:新手上路
帖 子:21
专家分:0
注 册:2012-12-13
收藏
得分:0 
bu
2013-01-06 21:56
快速回复:链表排序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029416 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved