利用队列操作,模拟实现打印作业任务管理。 #define ERROR 1 #define OK 0 #define OVERFLOW 1 typedef int QElemType; typedef int Status; #define MAXQSIZE 100 //最大队列长度 typedef struct { QElemType *base; // 动态分配存储空间 int front; // 头指针,若队列不空,指向队列头元素 int rear; // 尾指针,若队列不空, //指向队列尾元素的下一个位置 }SqQueue;
时间: 2023-06-12 09:07:42 浏览: 115
以下是模拟实现打印作业任务管理的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define ERROR 1
#define OK 0
#define OVERFLOW 1
typedef int QElemType;
typedef int Status;
#define MAXQSIZE 100 //最大队列长度
typedef struct {
QElemType *base; // 动态分配存储空间
int front; // 头指针,若队列不空,指向队列头元素
int rear; // 尾指针,若队列不空,
//指向队列尾元素的下一个位置
} SqQueue;
Status InitQueue(SqQueue *Q) {
Q->base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType));
if (!Q->base) exit(OVERFLOW); //存储分配失败
Q->front = Q->rear = 0;
return OK;
}
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}
Status EnQueue(SqQueue *Q, QElemType e) {
if ((Q->rear + 1) % MAXQSIZE == Q->front) return ERROR; //队列满
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue *Q, QElemType *e) {
if (Q->front == Q->rear) return ERROR; //队列空
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXQSIZE;
return OK;
}
Status PrintQueue(SqQueue Q) {
if (Q.front == Q.rear) {
printf("队列为空!\n");
return OK;
}
printf("队列中的元素为:");
int i = Q.front;
while (i != Q.rear) {
printf("%d ", Q.base[i]);
i = (i + 1) % MAXQSIZE;
}
printf("\n");
return OK;
}
int main() {
SqQueue Q;
QElemType e;
InitQueue(&Q);
printf("请输入打印作业的数量:");
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int job;
printf("请输入第%d个打印作业需要的打印时间:", i);
scanf("%d", &job);
if (EnQueue(&Q, job) == ERROR) {
printf("队列已满,打印作业%d无法加入队列!\n", i);
}
}
printf("\n打印作业队列中共有%d个打印作业。\n", QueueLength(Q));
PrintQueue(Q);
printf("\n开始打印作业...\n");
while (Q.front != Q.rear) {
DeQueue(&Q, &e);
printf("打印作业%d已完成打印,剩余打印作业数量:%d\n", e, QueueLength(Q));
}
printf("所有打印作业已完成打印。\n");
return 0;
}
```
以上程序实现了一个打印作业任务管理的队列,用户可以输入打印作业的数量和每个打印作业需要的打印时间,程序将打印作业加入队列,并依次完成打印作业。在队列满的情况下,无法将新的打印作业加入队列,并输出相应的提示信息。
阅读全文