#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status;
时间: 2024-09-02 08:03:07 浏览: 95
这是C语言中常见的预处理器宏定义和类型别名使用示例。`#define`用于常量定义,例如`OK`、`ERROR`、`TRUE` 和 `FALSE` 定义了整数值,分别代表"成功"(1)、"错误"(0)、"真"(1)和"假"(0)。这些定义通常用于简化代码,使得状态或条件判断更易于理解和表示。
`typedef` 是一种类型别名声明,它允许程序员给已存在的数据类型起一个新的名字。在这个例子中,`typedef int Status;` 表明 `Status` 类型实际上是 `int` 类型的别名。这样做的好处是可以清晰地表明某个变量是用来存储某种特定状态的,比如操作结果的状态码,提高代码的可读性和一致性。
相关问题
利用队列操作,模拟实现打印作业任务管理。 #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;
以下是模拟实现打印作业任务管理的代码:
```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;
}
```
以上程序实现了一个打印作业任务管理的队列,用户可以输入打印作业的数量和每个打印作业需要的打印时间,程序将打印作业加入队列,并依次完成打印作业。在队列满的情况下,无法将新的打印作业加入队列,并输出相应的提示信息。
#define MAXSIZE 1000 #define SIZE 100 #define OVERFLOW -1 #define OK 1 #define ZERO 0 typedef char DataType; typedef int Elemtype; typedef struct node//创建链表 { DataType data[MAXSIZE]; struct node* next; }LNode, * LinkList;
这段代码定义了一些宏和结构体类型,具体解释如下:
- `#define MAXSIZE 1000` 定义了一个名为`MAXSIZE`的宏,它的值为1000,用来表示链表中数据域数组的最大长度。
- `#define SIZE 100` 定义了一个名为`SIZE`的宏,它的值为100,用来在输入文章时限制每行输入的字符数不超过100。
- `#define OVERFLOW -1` 定义了一个名为`OVERFLOW`的宏,它的值为-1,用来表示函数执行失败或出现异常的情况。
- `#define OK 1` 定义了一个名为`OK`的宏,它的值为1,用来表示函数执行成功的情况。
- `#define ZERO 0` 定义了一个名为`ZERO`的宏,它的值为0,用来表示数值为0的情况。
- `typedef char DataType;` 定义了一个名为`DataType`的类型别名,它表示链表中数据域的数据类型为`char`。
- `typedef int Elemtype;` 定义了一个名为`Elemtype`的类型别名,它表示链表中节点指针的数据类型为`int`。
- `typedef struct node`定义了一个名为`node`的结构体类型,它包含两个成员:一个数据域数组`data`和一个指向下一个节点的指针`next`。
- `LNode, * LinkList` 定义了两个类型别名,`LNode`表示结构体类型`node`,`LinkList`表示指向结构体类型`node`的指针类型。
综上所述,这段代码定义了一些宏和类型别名,用来方便地表示链表中的数据类型和节点类型。其中,宏定义用来定义常量,类型别名用来定义自定义的数据类型,可以简化代码的编写和阅读。
阅读全文