首页
社区
课程
招聘
[已解决]一道简单的程序题
发表于: 2009-3-14 13:24 4071

[已解决]一道简单的程序题

2009-3-14 13:24
4071
额不会,请大家帮帮忙。  

给定程序中,函数fun的功能是将带头结点的单向链表结点数据域中的数据从小到大排序。
即若原链表结点数据域从头至尾的数据为:16、3、1、7、5,排序后链表结点数据域从头至尾的数据为:1、3、5、7、16。
请在程序的1.2.3.处填入正确的内容,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include  <stdio.h>
#include  <stdlib.h>
#define    N    6
typedef struct node 
{ int data;
 struct node  *next;
}NODE;
void fun(NODE *h)
{
  NODE *p, *q;  int  t;
/**********found**********/
  p=   1   ;
  while(p) 
  {
/**********found**********/
    q=   2   ;
    while(q) 
    {
/**********found**********/
      if(p->data   3   q->data)
      {
        t=p->data;
        p->data=q->data;
        q->data=t;
      }
      q=q->next;
    }
    p=p->next;
  }
}
NODE *creatlist(int a[])
{
  NODE *h,*p,*q;  int i;
  h=(NODE*)malloc(sizeof(NODE));
  h->next=NULL;
  for( i=0; i<N; i++ )
  {
    q=(NODE*)malloc(sizeof(NODE));
    q->data=a[i];
    q->next=NULL;
    if(h->next==NULL)  h->next=p=q;
    else{ p->next=q;p=q; }
  }
  return h;
}
void outlist(NODE  *h)
{
  NODE *p;
  p=h->next;
  if(p==NULL)
    printf("The list is NULL!\n");
  else
  {
    printf("\nHead  ");
    do
    {  
      printf("->%d",p->data);
      p=p->next;  
    }while(p!=NULL);
    printf("->End\n");
  }
}
main()
{
  NODE *head;
  int a[N]={ 0, 16, 3, 1, 7, 5 };
  head=creatlist(a);
  printf("\nThe original list:\n");
  outlist(head);
  fun(head);
  printf("\nThe list after sorting :\n");
  outlist(head);
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1098
活跃值: (193)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
2
p=h;
q=p->next;
>
经典的冒泡排序法
2009-3-14 16:38
0
雪    币: 349
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢zhuliang的帮助。
2009-3-15 10:01
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
冒泡不需要这么麻烦,两个循环就行了!
2009-3-15 20:26
0
游客
登录 | 注册 方可回帖
返回
//