#include <stdio.h> #include <stdlib.h> #include <string.h> #define maxsize 20 typedef struct { char ming[maxsize]; } Name; typedef Name datatype; typedef struct { datatype data[maxsize]; int front; int rear; } SeQueue; void InitQueue(SeQueue *sq) { sq->front = sq->rear = 0; } int IsEmptyQueue(SeQueue *sq) { return sq->front == sq->rear; } int IsFullQueue(SeQueue *sq) { return (sq->rear + 1) % maxsize == sq->front; } int EnQueue(SeQueue *sq, datatype x) { if (IsFullQueue(sq)) { return 0; } sq->rear = (sq->rear + 1) % maxsize; sq->data[sq->rear] = x; return 1; } int DeQueue(SeQueue *sq, datatype *x) { if (IsEmptyQueue(sq)) { return 0; } sq->front = (sq->front + 1) % maxsize; *x = sq->data[sq->front]; return 1; } int main() { Name a[12] = { "雷震子", "姜子牙", "哪吒", "申公豹", "九尾狐", "天尊", "太乙", "杨戬", "黄飞虎", "纣王", "李靖", "土行孙" }; int m; char name[maxsize]; printf("请输入一个人的姓名和任意正整数m(m<=12),以空格分隔:"); scanf("%s %d", name, &m); SeQueue out_queue; InitQueue(&out_queue); int count = 0; int i = 0; while (!IsEmptyQueue(&out_queue) || count == 0) { count++; if (count == m) { count = 0; name = out_queue.data[out_queue.front + 1].ming; DeQueue(&out_queue, &name); printf("%s ", name); } else { i = (i + 1) % 12; if (strcmp(a[i].ming, name) != 0) { EnQueue(&out_queue, a[i]); } } } printf("\n出列顺序:"); Print(&out_queue); SeQueue group[4]; for (int i = 0; i < 4; i++) { InitQueue(&group[i]); } int group_count = 0; int num = 0; i = 0; while (!IsEmptyQueue(&out_queue)) { DeQueue(&out_queue, &name); num++; EnQueue(&group[group_count], name); if (num == 4) { num = 0; group_count++; } } pr追踪
时间: 2023-06-20 07:06:38 浏览: 162
在这段代码中,定义了一个结构体Name,其中只有一个成员变量ming,用于存储姓名。然后定义了一个SeQueue结构体,其中包含了一个datatype类型的data数组和两个整型变量front和rear,用于实现队列的功能。
接下来是一些队列的操作函数。InitQueue函数用于初始化队列,IsEmptyQueue函数和IsFullQueue函数用于判断队列是否为空和是否已满,EnQueue函数用于往队列中插入元素,DeQueue函数用于从队列中删除元素。
在主函数中,首先定义了一个Name类型的数组a,用于存储12个人的姓名。然后通过输入获取了一个人的姓名和一个正整数m。接下来初始化了一个出队列out_queue,并定义了一些变量,用于实现模拟出队列的操作。在while循环中,如果出队列不为空或者是第一次循环,就会进行出队列操作。如果计数器count等于m,则将队头元素出队列,并打印出队列元素的姓名;否则,将i加1,然后将a[i]插入到出队列中。最后打印出列顺序。
接下来定义了一个SeQueue类型的数组group,用于存储分组的结果。然后进行了一些初始化操作,接着进行了模拟分组的操作。每当从出队列中取出一个元素时,就将该元素插入到group数组中的一个队列中,并用num变量计数,当num等于4时,将group_count加1,表示已经分完一个组。最后打印了分组结果。
相关问题
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef struct
这段代码是C语言中的头文件引用和一些定义的示例。其中,`#include <stdio.h>`和`#include <stdlib.h>`是用来引入标准库函数的头文件。`stdio.h`包含了输入输出相关的函数,如`printf`和`scanf`;`stdlib.h`包含了一些常用的函数,如内存分配函数`malloc`和随机数生成函数`rand`。
`#define MAXSIZE 100`是一个宏定义,用来定义一个常量`MAXSIZE`,它的值为100。
`typedef int ElemType;`是用来给`int`类型起一个别名`ElemType`,方便在代码中使用。
至于代码中的结构体部分,由于你没有提供完整的代码,所以无法给出具体的解释。但一般来说,结构体用于定义一种自定义的数据类型,可以包含多个不同类型的成员变量。
优化这段代码#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<conio.h> #define OK 1 #define error 0 #define MVNum 100 #define MAXSIZE 10 typedef int OtherInfo,QElemtype; typedef char VerTexType; //结构体定义 typedef struct ArcNode{ int adjvex;
首先,该段代码中包含了一些不必要的头文件,例如:conio.h,malloc.h等。建议只保留stdio.h和stdlib.h。
其次,可以将#define OK 1和#define error 0替换为枚举类型,使代码更加清晰易读。
最后,在结构体定义中,可以将OtherInfo和QElemtype合并为一个类型,避免定义过多类型。同时,也可以将结构体中的变量类型进行优化,例如将int类型的adjvex改为short或者char类型。
重构后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
#define MAX_ARC_NUM 10
typedef enum {
ERROR = 0,
OK = 1
} Status;
typedef char VertexType;
typedef int ArcType;
typedef struct ArcNode {
int adjvex;
struct ArcNode* nextarc;
ArcType* info;
} ArcNode;
typedef struct VNode {
VertexType data;
ArcNode* firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
} ALGraph;
```
希望可以帮到你。
阅读全文