📄 8_4.c
字号:
# include <stdio.h>
# include <stdlib.h>
typedef struct { // 顾客信息结构
int arrive;
int treat;
}NODE;
typedef struct node {
NODE data;
struct node *link;
}LNODE;
LNODE *head,*tail;
NODE curr,temp;
char Fname[120];
FILE *fp; //指向FILE类型结构体的指针变量
/*函数,链接队列进队函数*/
void len_queue(LNODE **hpt,LNODE **tpt,NODE x)
{
LNODE *p = (LNODE *)malloc(sizeof(LNODE));
p->data = x;
p->link = NULL;
if (*hpt == NULL) *tpt = *hpt = p;
else
*tpt = (*tpt)->link = p;
}
/*函数,链接队列出队函数*/
int lde_queue(LNODE **hpt,LNODE **tpt,NODE *cp)
{
LNODE *p = *hpt;
if (*hpt == NULL) return 1 ; //对空
*cp = (*hpt)->data;
*hpt = (*hpt)->link;
if (*hpt == NULL) *tpt = NULL;
free(p);
return 0;
}
void main()
{
int dwait = 0, //接待员总等待时间
clock = 0,
wait = 0, //顾客总等待时间
count = 0, //顾客总人数
have = 0,finish;
printf("Enter file name.");
printf("输入同目录下wait.txt的完整物理路径\n");
scanf("%s",Fname);
if ((fp = fopen(Fname,"r")) == NULL) { //打开文件
printf("Can't open file %s",Fname);
return;
}
head = NULL; tail=NULL;
have = fscanf(fp,"%d%d",&temp.arrive, &temp.treat); /*正确读入,have为2*/
do { /*约定每轮循环,接待一位顾客*/
if (head == NULL && have == 2) { /*等待队列为空,但还有顾客*/
dwait += temp.arrive - clock; /*累计接待员总等待时间 */
clock = temp.arrive; /*时钟推进到暂存顾客的到达时间*/
len_queue(&head,&tail,temp); /*暂存变量中的顾客信息进队*/
have = fscanf(fp,"%d%d",&temp.arrive,&temp.treat); /*fp,文件指针,从磁盘文件上读入*/
}
count ++; /*累计顾客人数*/
lde_queue(&head,&tail,&curr); /*出队一个顾客信息*/
wait += clock - curr.arrive; /*累计顾客的总等待时间*/
finish = clock + curr.treat; /*设定接待结束时间*/
while (have == 2 && temp.arrive <= finish) {
/*下一位顾客的到达时间在当前顾客接待结束之前*/
len_queue(&head,&tail,temp); /*暂存变量中的顾客信息进队*/
have = fscanf(fp,"%d%d",&temp.arrive,&temp.treat);
}
clock = finish; /*时钟推进到当前顾客接待结束时间 */
} while(have == 2 || head!=NULL);
printf("结果:接待员等待时间%d\n顾客平均等待时间%f\n",dwait,(double)wait/count);
printf("模拟总时间:%d,顾客人数:%d,总等待时间:%d\n",clock,count,wait);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -