救命啊!链表排序!好急啊!
随机生成一个链表,怎么把它以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



