#define MAX_SIZE 10 typedef struct { int data[MAX_SIZE]; int front, rear; } Queue; // 初始化队列 void initQueue(Queue *q) { q->front = q->rear = 0; } // 判断队列是否为空 int isEmpty(Queue *q) { return q->front == q->rear; } // 判断队列是否已满 int isFull(Queue *q) { return (q->rear + 1) % MAX_SIZE == q->front; } // 入队 void enQueue(Queue *q, int x) { if (isFull(q)) { printf("Queue is full.\n"); return; } q->data[q->rear] = x; q->rear = (q->rear + 1) % MAX_SIZE; } // 出队 int deQueue(Queue *q) { if (isEmpty(q)) { printf("Queue is empty.\n"); return -1; } int x = q->data[q->front]; q->front = (q->front + 1) % MAX_SIZE; return x; } // 打印队列中的元素 void printQueue(Queue *q) { if (isEmpty(q)) { printf("Queue is empty.\n"); return; } int i; for (i = q->front; i != q->rear; i = (i + 1) % MAX_SIZE) { printf("%d ", q->data[i]); } printf("\n"); } int main() { Queue q; initQueue(&q); enQueue(&q, 3); enQueue(&q, 2); enQueue(&q, 1); printf("入队序列:3 2 1\n"); printf("出队序列:"); printf("%d ", deQueue(&q)); printf("%d ", deQueue(&q)); printf("\n"); enQueue(&q, 4); enQueue(&q, 5); enQueue(&q, 6); enQueue(&q, 7); printf("入队序列:4 5 6 7\n"); printf("出队序列:"); while (!isEmpty(&q)) { printf("%d ", deQueue(&q)); } printf("\n"); return 0; }
时间: 2023-07-16 08:11:45 浏览: 72
这是一个用数组实现的队列的代码。队列是一种先进先出的数据结构,支持在队尾插入元素,队头删除元素。这段代码中,使用了一个结构体来表示队列,其中包含一个数组和两个指针,分别指向队头和队尾。具体来说,这段代码实现了以下几个函数:
1. `initQueue(Queue *q)`:初始化队列,将队头和队尾指针都设置为0。
2. `isEmpty(Queue *q)`:判断队列是否为空,当队头指针等于队尾指针时,说明队列为空。
3. `isFull(Queue *q)`:判断队列是否已满,当队尾指针加1后等于队头指针时,说明队列已满。
4. `enQueue(Queue *q, int x)`:将元素x插入队尾。如果队列已满,则输出提示信息并返回。
5. `deQueue(Queue *q)`:删除队头元素并返回该元素。如果队列为空,则输出提示信息并返回-1。
6. `printQueue(Queue *q)`:打印队列中的所有元素。
在`main()`函数中,首先创建了一个队列,然后依次插入3、2和1三个元素,再依次删除队头元素并输出。接着,又依次插入4、5、6和7四个元素,最后再依次删除队头元素并输出。
相关问题
#define NULL_BITREE_TOKEN '#' #define MAX_STACK_LEVEL 100 #define MAX_QUEUE_SIZE 128 typedef struct BiTreeNode { char Data; struct BiTreeNode *Parent; struct BiTreeNode *LChild; struct BiTreeNode *RChild; }BiTreeNode, *BiTreePtr; enum BiTreeChildType { btLeftChild, btRightChild, btNull }; typedef struct { BiTreePtr Elem[ MAX_STACK_LEVEL ]; int Top; }SeqBiTreePtrStack; typedef struct { BiTreePtr Elem[ MAX_QUEUE_SIZE ]; int Front, Rear; }SeqBiTreePtrQueue; int TotalNodeNum = 0; 根据以上代码补全下面代码并且成功运行:显示二叉树中给定结点的祖先结点 void DisplayBinaryTreeNodeAncestors(BiTreePtr Root, char NodeData){}
void DisplayBinaryTreeNodeAncestors(BiTreePtr Root, char NodeData){
SeqBiTreePtrStack S;
BiTreePtr p = Root, q = NULL;
S.Top = -1;
while(p || S.Top != -1){
if(p){
S.Elem[++S.Top] = p;
p = p->LChild;
}
else{
p = S.Elem[S.Top];
if(p->Data == NodeData){
printf("Ancestors of node %c are: ", NodeData);
for(int i = 0; i < S.Top; i++){
printf("%c ", S.Elem[i]->Data);
}
printf("\n");
return;
}
if(p->RChild && p->RChild != q){
p = p->RChild;
S.Elem[++S.Top] = p;
p = p->LChild;
}
else{
q = p;
--S.Top;
p = NULL;
}
}
}
printf("Node %c not found in the tree!\n", NodeData);
}
#include <stdio.h> #include <stdlib.h> #define MAX_QUEUE_SIZE 1000 // 定义队列结构体 typedef struct { int data[MAX_QUEUE_SIZE]; // 存储队列元素的数组 int front; // 队头指针 int rear; // 队尾指针 } Queue; // 初始化队列 void initQueue(Queue *queue) { queue->front = 0; queue->rear = 0; } // 入队操作 void enqueue(Queue *queue, int element) { if ((queue->rear + 1) % MAX_QUEUE_SIZE == queue->front) { printf("队列已满,无法插入元素!\n"); return; } queue->data[queue->rear] = element; queue->rear = (queue->rear + 1) % MAX_QUEUE_SIZE; } // 出队操作 int dequeue(Queue *queue) { if (queue->front == queue->rear) { printf("队列为空,无法出队!\n"); return -1; } int element = queue->data[queue->front]; queue->front = (queue->front + 1) % MAX_QUEUE_SIZE; return element; }上面的代码如果队列元素是结构体 请调整代码
好的,如果队列元素是结构体类型,需要对队列的存储和出队操作进行修改。下面是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 1000 // 定义队列最大容量
// 定义结构体
typedef struct {
int id; // 学生编号
char name[20]; // 学生姓名
int age; // 学生年龄
} Student;
// 定义队列结构体
typedef struct {
Student data[MAX_QUEUE_SIZE]; // 存储队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = 0;
queue->rear = 0;
}
// 入队操作
void enqueue(Queue *queue, Student element) {
if ((queue->rear + 1) % MAX_QUEUE_SIZE == queue->front) { // 队列已满,无法插入元素
printf("队列已满,无法插入元素!\n");
return;
}
queue->data[queue->rear] = element;
queue->rear = (queue->rear + 1) % MAX_QUEUE_SIZE;
}
// 出队操作
Student dequeue(Queue *queue) {
if (queue->front == queue->rear) { // 队列为空,无法出队
printf("队列为空,无法出队!\n");
Student emptyStudent = {-1, "", -1}; // 返回一个空的结构体
return emptyStudent;
}
Student element = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_QUEUE_SIZE;
return element;
}
int main() {
Queue queue;
initQueue(&queue);
// 入队操作
Student student1 = {1, "Tom", 18};
enqueue(&queue, student1);
Student student2 = {2, "Jerry", 20};
enqueue(&queue, student2);
Student student3 = {3, "Lucy", 19};
enqueue(&queue, student3);
// 出队操作
Student element;
element = dequeue(&queue);
printf("出队元素:id=%d, name=%s, age=%d\n", element.id, element.name, element.age);
element = dequeue(&queue);
printf("出队元素:id=%d, name=%s, age=%d\n", element.id, element.name, element.age);
element = dequeue(&queue);
printf("出队元素:id=%d, name=%s, age=%d\n", element.id, element.name, element.age);
element = dequeue(&queue); // 队列为空,无法出队
printf("出队元素:id=%d, name=%s, age=%d\n", element.id, element.name, element.age);
return 0;
}
```
在这个例子中,队列元素为结构体类型 `Student`,并且在入队和出队操作中均使用结构体变量进行处理。
阅读全文