#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
void Initializequeue(Queue* pq)
{
pq->rear=pq->front=NULL;
}
bool Queueisfull(Queue* pq)
{
return pq->items==MAXQUEUE;
}
bool Queueisempty(Queue* pq)
{
return pq->items==0;
}
int Queuecount(Queue* pq)
{
return pq->items;
}
bool Enqueue(Item item,Queue* pq) //pq是一个指向Queue的指针 Node*是一个指向Node的指针
{ //关联是Queue->front指向一个Node的结构
Node* pt;
pt=(Node*)malloc(sizeof(Node));
pt->item=item;
pt->next=NULL;
//Node* p=pq->front;
if(pq->front==NULL)
pq->front=pt;
else
pq->rear->next=pt;
pq->rear=pt;
pq->items++;
};
void Dequeue(Queue* pq,Item *pitem)
{
*pitem=pq->front->item;
Node* p=pq->front->next;
free(pq->front);
pq->front=p;
pq->items--;
//return pitem;
}
void Emptythequeue(Queue* pq)
{
Item dummy;
while(!Queueisempty(pq))
Dequeue(&pq,&dummy);
}
/*queue.h*/
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdbool.h>
#define MAXQUEUE 10
typedef struct{
long arrive;
int processtime;
} Item;
typedef struct node{
Item item;
struct node* next;
}Node;
typedef struct queue{
Node * front;
Node * rear;
int items;
}Queue;
void Initializequeue(Queue* pq);
bool Queueisfull(Queue* pq);
bool Queueisempty(Queue* pq);
int Queuecount(Queue* pq);
bool Enqueue(Item item,Queue* pq);
void Dequeue(Queue* pq,Item *item);
void Emptythequeue(Queue* pq);
#endif
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "queue.h"
#define MIN_PER_HOUR 60.0
bool newcustomer(double time);
Item customertime(long when);
int main()
{
Queue line;
Item temp;
int hours;
int perhour;
long cycle, cyclelimit;
int turnaways=0;
long wait_time=0;
long line_wait=0;
long served=0;
long sum_line=0;
double min_per_cust;
long customers;
Initializequeue(&line);
srand((unsigned int)time(0));
puts("Case study:Sigmund Lander's Advice Booth");
puts("enter the number of simulated hours:");
scanf("%d",&hours);
cyclelimit=MIN_PER_HOUR*hours;
puts("Enter the average number of customers per hour:");
scanf("%d",&perhour);
min_per_cust=MIN_PER_HOUR/perhour; //一个顾客来的时间间隔
for(cycle=0;cycle<cyclelimit;cycle++)
{
if(newcustomer(min_per_cust))
{
if(Queueisfull)
turnaways++;
else
{
customers++;
temp=customertime(cycle);
Enqueue(temp,&line);
}
}
if(wait_time<0&&!Queueisempty(&line))
{
Dequeue(&line,&temp);
wait_time=temp.processtime;
line_wait+=cycle-temp.arrive;
served++;
}
if(wait_time>=0)
wait_time--;
sum_line+=Queuecount(&line);
}
if(customers>0)
{
printf("customers accepted: %ld\n",customers);
printf("customers served: %d\n");
printf("turnaways:%ld\n",turnaways);
printf("average queue size:%.2f\n",
(double)line_wait/cyclelimit);
printf("average wait time :%.2f minutes\n",
(double)line_wait/served);
}
else puts("no customers");
Emptythequeue(&line);
puts("bye");
return 0;
}
bool newcustomer(double x)
{
if(rand()*x/RAND_MAX<1)
return true;
else
return false;
}
Item customertime(long when)
{
Item cust;
cust.arrive=when;
cust.processtime=rand()%3+1;
return cust;
}
请问这里为什么segmentation fault(应该是Dequeue函数的问题?)
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。