一小链表 帮忙看看哪里有问题
程序代码:#include <stdio.h>
#include <stdlib.h>
struct PCB
{
char name[10];
int rtime;
int priority;
char state;
struct PCB *next;
};
/*
*初始化PCB
*/
struct PCB *initPCB()
{
struct PCB *head;
head=(struct PCB *)malloc(sizeof(struct PCB));
if(NULL==head)
{
exit(-1);
}
head->next=NULL;
printf("please input the information of process\n");
printf("name:");
scanf("%s",head->name);
printf("run time:");
scanf("%d",&head->rtime);
printf("priority:");
scanf("%d",&head->priority);
head->state='R';
printf("\n");
return head;
}
/*
*找到优先级最高的进程
*/
void MaxPriorityProcess(struct PCB * head,struct PCB* pCurrent)
{
struct PCB* temp;
struct PCB* p;
temp=head;
if(NULL==temp)//队列为空
{
temp=pCurrent;
}
if(pCurrent->priority>temp->priority)//如果优先级最大
{
pCurrent->next=temp;
temp=pCurrent;
}
if(NULL==temp->next)//队列里只有一个元素
{
if(temp->priority>pCurrent->priority)
{
temp->next=pCurrent;
}
}
/*队列元素排列*/
p=head;
while(p!=NULL)
{
if(temp->priority>pCurrent->priority)
{
p=temp;//记录当前节点
temp=temp->next;//后移
}
else
{
break;
}
}
pCurrent->next=p->next;
p->next=pCurrent;
}
/*
*打印PCB
*/
void printPCB(struct PCB * head)
{
struct PCB* temp;
temp=head->next;
while(temp!=NULL)
{
printf("\n process name: %s\n run time: %d\n priority num: %d\n process state:%c\n",
temp->name,temp->rtime,temp->priority,temp->state);
temp=temp->next;
}
printf("\n");
}
int main()
{
struct PCB* head;
struct PCB* temp;
head=new PCB;
//PCB AA;
//head = &AA;
for(int i=0;i<3;i++)
{
temp=initPCB();
temp->next = NULL;
MaxPriorityProcess(head,temp);
}
printPCB(head);
return 0;
}


