用c语言实现循环队列的初始化,判断队列空否,入队列和出队列
时间: 2023-05-31 16:02:16 浏览: 70
1. 循环队列的初始化
```
#define MAX_SIZE 10 // 最大队列长度
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
```
2. 判断队列是否为空
```
int isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
```
3. 入队列
```
int enqueue(Queue *q, int x) {
if ((q->rear + 1) % MAX_SIZE == q->front) { // 队满
return 0;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
return 1;
}
```
4. 出队列
```
int dequeue(Queue *q, int *x) {
if (isQueueEmpty(q)) { // 队空
return 0;
}
*x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return 1;
}
```
相关问题
用c语言编写程序实现循环队列的初始化,判断队列空否,入队列和出队列
循环队列的定义:
```c
#define MAXSIZE 100 // 循环队列最大长度为100
typedef struct{
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
```
循环队列的初始化:
```c
void InitQueue(Queue *q){
q->front = q->rear = 0; // 队头和队尾指针初始化为0
}
```
判断队列是否为空:
```c
int IsEmpty(Queue *q){
if(q->front == q->rear) // 队头和队尾指针相同时,队列为空
return 1;
else
return 0;
}
```
入队列:
```c
int EnQueue(Queue *q, int x){
if((q->rear+1)%MAXSIZE == q->front) // 队列已满,无法入队
return 0;
q->data[q->rear] = x; // 将元素x插入队尾
q->rear = (q->rear+1)%MAXSIZE; // 队尾指针向后移动一位
return 1;
}
```
出队列:
```c
int DeQueue(Queue *q, int *x){
if(q->front == q->rear) // 队列为空,无法出队
return 0;
*x = q->data[q->front]; // 取出队头元素
q->front = (q->front+1)%MAXSIZE; // 队头指针向后移动一位
return 1;
}
```
用C语言编写一个程序实现循环队列的初始化,判断队列空否,入队列和出队列等。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化循环队列
void initQueue(Queue *queue) {
queue->front = 0;
queue->rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue *queue) {
return (queue->front == queue->rear);
}
// 判断队列是否已满
int isFull(Queue *queue) {
return ((queue->rear + 1) % MAX_SIZE == queue->front);
}
// 入队列
int enqueue(Queue *queue, int data) {
if (isFull(queue)) {
printf("Queue is full!\n");
return 0;
}
queue->data[queue->rear] = data;
queue->rear = (queue->rear + 1) % MAX_SIZE;
return 1;
}
// 出队列
int dequeue(Queue *queue, int *data) {
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return 0;
}
*data = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
return 1;
}
int main() {
Queue queue;
int data;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
dequeue(&queue, &data);
printf("%d ", data);
dequeue(&queue, &data);
printf("%d ", data);
enqueue(&queue, 4);
enqueue(&queue, 5);
enqueue(&queue, 6);
dequeue(&queue, &data);
printf("%d ", data);
dequeue(&queue, &data);
printf("%d ", data);
dequeue(&queue, &data);
printf("%d ", data);
return 0;
}
```