标题:关于指针,p->next一直为null啊。。。
只看楼主
Trista_沫
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-2-21
 问题点数:0 回复次数:0 
关于指针,p->next一直为null啊。。。
#include<stdio.h>
#include<stdlib.h>
#include <string.h>

  
typedef struct PCB      //定义进程控制块
{   
    char name[20];   //进程名  
    char state;   //运行状态  
    int  ArriveTime;  //到达时间  
    int  StartTime;  //进程开始时间  
    int  FinishTime;  //进程结束时间  
    int  ServiceTime;   //服务时间  

    struct PCB *next;  //指向下个进程
}PCB;  
int time;
int n;    //进程个数  
PCB *head=NULL,*p,*q; //进程链表指针

void run_fcfs()
{
    p=head;
    q=p;
    p->StartTime=p->ArriveTime;
    p->FinishTime=p->StartTime+p->ServiceTime;
    printf("作业名\t到达时间\t服务时间\t开始时间\t完成时间\n");   
    printf("%s\t%6d\t%10d\t%10d\t%8d\n",p->name,p->ArriveTime,p->ServiceTime,p->StartTime,p->FinishTime);
    for(int i=1;i<n;i++)
    {
        q=p->next;
        q->StartTime=p->FinishTime;
        q->FinishTime=q->StartTime+q->ServiceTime;
        printf("作业名\t到达时间\t服务时间\t开始时间\t完成时间\n");   
        printf("%s\t%6d\t%10d\t%10d\t%8d\n",q->name,q->ArriveTime,q->ServiceTime,q->StartTime,q->FinishTime);
    }
}  



void sort_fcfs()
{
    p=head;

    PCB *k;
    for(int j=n-1;(j>=0);j--)
    {
        p=head;
        q=p->next;
        for(int i=0;i<n;i++)
        {
            if(p->state=='F')
            {
                if(p->ArriveTime >q->ArriveTime)
                {
                    k->ArriveTime=p->ArriveTime;
                    k->ServiceTime=p->ServiceTime;
                    strcpy(k->name,p->name);

                    p->ArriveTime=q->ArriveTime;
                    p->ServiceTime=q->ServiceTime;
                    strcpy(p->name,q->name);

                    q->ArriveTime=k->ArriveTime;
                    q->ServiceTime=k->ServiceTime;
                    strcpy(q->name,k->name);

                    k=p;
                    p=q;
                    q=k;
                }
                q=q->next;
                p=p->next;
            }
        }
    }
    run_fcfs();
}





void FCFS()          //获得进程信息并创建进程
{  
    int num;
    printf("\n进程个数:");  
    scanf("%d",&n);  
    for(num=0;num<n;num++)  
    {   
        p=(PCB *)malloc(sizeof(PCB));   
        printf("依次输入:\n进程名 到达时间 服务时间\n");   
        scanf("%s\t%d\t%d",&p->name,&p->ArriveTime,&p->ServiceTime);   
        if(head==NULL)   
        {
            head=p;q=p;
        }   
        
        q->next=p;   
        p->StartTime=0;   
        p->FinishTime=0;   
        p->next=NULL;   
        p->state='F';   
        q=p;         
    }
    sort_fcfs();
}  




void main()  
{     
    int a=1;
    while(a!=0)
    {
        printf("\n\n");
        printf("\t\t/*************************/");
        printf("\n\t\t/*    1、先到先服务 调 度      */");
        printf("\n\t\t/*    2、短作业优先 调 度       */");
        printf("\n\t\t/*    3、时间片轮转 调 度       */");
        printf("\n\t\t/*    4、优 先  级  调 度       */");
        printf("\n\t\t/*    5、多 级 队 列调 度          */");
        printf("\n\t\t/*    0、 退   出        */\n");
        printf("\t\t/*************************/");
        printf("\n\n\t请选择菜单项:\t");
        scanf("%d",&a);
        printf("\n");
        switch(a)
        {
            case 1: FCFS(); break;
            case 2: break;
            case 3: break;
            case 4: break;
            case 5: break;
            default: break;
        }
        if(a<0&&a>4)
        {
            printf("输入不正确,请重新输入!");
            break;
        }
    }
}

红色标出来的地方就是错误所在T T但是自己不知道怎么改。。。目测逻辑问题,求大神帮帮忙T T
做得是先来先服务的进程调度
搜索更多相关主题的帖子: null include 
2013-06-26 09:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-416084-1-1.html




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

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