CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

救命啊!链表排序!好急啊!

楼主RobinChurchill(秋枫)2003-07-01 03:53:30 在 C/C++ / C语言 提问

随机生成一个链表,怎么把它以priority的值为基数从大到小排序?以下是链表程序,在线等待;谢谢,谢谢大虾救命啊!  
   
  #include   <stdio.h>  
  #include   <stdlib.h>  
   
  typedef   struct   process  
        {int   ID;  
          int   priority;  
          int   cpuTime;  
          enum   string{ready,run,finish}   state;  
          struct   process   *preview;  
          struct   process   *next;  
        }   PC;  
   
  main()  
  {int   i,n;  
    PC   head;  
   
    clrscr();  
    printf("\nPlease   input   the   Process's   count:");  
    scanf("%d",&n);  
    printf("The   Process   has   the   %d   ID\n\n",n);  
   
    head.next=NULL;  
    head.preview=NULL;  
    node=&head;  
   
    for(i=1;i<=n;i++)  
        {  
          node->next=(struct   process   *)malloc(sizeof(struct   process));  
          node->next->preview=node;  
          node=node->next;  
          node->ID=i;  
          node->priority=random(40+1);  
          node->cpuTime=random(6+1)+2;  
          node->state=ready;  
          node->next=NULL;  
        }  
  }  
   
  问题点数:100、回复次数:8Top

1 楼fastzch(红领巾)回复于 2003-07-01 05:20:55 得分 5

排序的方法太多了,有好十几种,你想用哪一种???  
   
  去看看数据结构的书吧,肯定会有收获的。  
   
  祝你好运!Top

2 楼pp4u(方便面(当天结贴))回复于 2003-07-01 08:13:31 得分 5

我看和数组排序没什么区别,冒泡法。。。Top

3 楼geodgehoul(啊哈)回复于 2003-07-01 08:51:12 得分 5

这个自己试一下吧,选出最大的元素让他的指针指向二大的元素,以此类推    
  这应该不是什么难事,你只需要有一两个临时节点来保存一些信息就行了啊Top

4 楼dchg2000(偏爱小龙女(http://www.go2linux.cn/))回复于 2003-07-01 09:00:19 得分 5

插入排序吧,我看比较容易!!!  
  Top

5 楼zteliubin(bill)回复于 2003-07-01 09:05:39 得分 5

冒泡排序方便一些,因为只在两个相邻节点做交换,不过交换时可能涉及4个节点的  
  重新指向操作(双向链表的话)Top

6 楼19830711(为你守候)回复于 2003-07-01 09:09:20 得分 5

多看看书吧Top

7 楼stars666(最后一天)回复于 2003-07-01 09:21:18 得分 10

把信箱留下,我给你发过去Top

8 楼arfi()回复于 2003-07-01 10:25:41 得分 60

#include   <stdio.h>  
  #include   <stdlib.h>  
   
  typedef   struct   process  
        {int   ID;  
          int   priority;  
          int   cpuTime;  
          enum   string{ready,run,finish}   state;  
          struct   process   *preview;  
          struct   process   *next;  
        }   PC;  
   
  void   sort(PC   **head);  
  void   display(PC   *head);  
  void   main(void)  
  {  
  int   i,n;  
  PC   *head   =   NULL;  
  PC   *p   =   head,   *node;  
   
  clrscr();  
  printf("\nPlease   input   the   Process's   count:");  
  scanf("%d",&n);  
  printf("The   Process   has   the   %d   ID\n\n",n);  
   
  for(i=1;i<=n;i++)  
  {  
  node   =   (struct   process   *)malloc(sizeof(struct   process));  
  if(node   ==   NULL)  
  {  
  printf("Allocate   memory   fail!\n");  
  exit(1);  
  }  
  node->ID=i;  
  node->priority=random(40+1);  
  node->cpuTime=random(6+1)+2;  
  node->state=ready;  
  node->next=NULL;  
  node->preview=NULL;  
   
  if(head   ==   NULL)  
  p   =   head   =   node;  
  else  
  {  
  p->next   =   node;  
  p->next->preview   =   p;  
  p   =   node;  
  }  
  }  
  display(head);  
  sort(&head);  
  display(head);  
  }  
   
  void   sort(PC   **head)  
  {  
  PC   *p1,   *p2,   *p;  
  PC   *p_pr,   *p_nx;  
  int   prior;  
   
  p1   =   p2   =   *head;  
  for(;   p1;   p1=p1->next)  
  {  
  p   =   NULL;  
  prior   =   p1->priority;  
  for(p2=p1->next;   p2;   p2=p2->next)  
  {  
  if(prior   >   p2->priority)  
  {  
  p   =   p2;  
  p_pr   =   p->preview;  
  p_nx   =   p->next;  
  prior   =   p2->priority;  
  }  
  }  
  if(p   !=   NULL)  
  {  
  if(*head   ==   p1)  
  *head   =   p;  
   
  p->preview   =   p1->preview;  
  if(p   !=   p1->next)  
  p->next   =   p1->next;  
  else  
  p->next   =   p1;  
  if(p->preview   !=   NULL)  
  p->preview->next   =   p;  
  if(p->next   !=   NULL)  
  p->next->preview   =   p;  
   
  if(p1   !=   p_pr)  
  p1->preview   =   p_pr;  
  else  
  p1->preview   =   p;  
  p1->next   =   p_nx;  
  if(p1->preview   !=   NULL)  
  p1->preview->next   =p1;  
  if(p1->next   !=   NULL)  
  p1->next->preview   =   p1;  
   
  p1   =   p;  
  }  
  }  
  }  
   
  void   display(PC   *p)  
  {  
  while(p)  
  {  
  printf("prior:   %d\n",   p->priority);  
  p   =   p->next;  
  }  
  printf("\n");  
  }Top

相关问题

  • 链表排序?
  • 单链表排序
  • 链表的排序问题
  • 链表的排序问题
  • 交叉表的排序问题?急
  • asp文章列表排序,急求!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • !!!链表排序问题,请大侠指点,很急,在线等待!!!
  • 求解链表的排序算法
  • c的线性链表排序。
  • 求单链表排序算法

关键词

  • pc
  • 节点
  • null
  • preview
  • next
  • node
  • cputime
  • priority
  • 链表
  • head

得分解答快速导航

  • 帖主:RobinChurchill
  • fastzch
  • pp4u
  • geodgehoul
  • dchg2000
  • zteliubin
  • 19830711
  • stars666
  • arfi

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo