本关任务:完成顺序队列的初始化、入队和出队函数 SqQueue* InitQueue( )//队列初始化 int enQueue(SqQueueq,ElemType e)//入队 int deQueue(SqQueueq,ElemType e)//出队一个元素
时间: 2024-11-30 19:14:08 浏览: 6
循环队列的学习解析以及C语言实现.doc
在C语言中,你可以创建一个顺序队列(SqQueue)的数据结构,通常使用数组作为底层存储,并通过两个指针(一个指向队头,另一个指向队尾)来管理插入和删除操作。以下是完成顺序队列的初始化、入队(enQueue)和出队(deQueue)函数的简单实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
ElemType* queue; // 队列元素的动态数组
int front; // 队首指针
int rear; // 队尾指针
int size; // 当前队列元素数量
} SqQueue;
// 初始化函数
SqQueue* InitQueue() {
SqQueue* q = (SqQueue*)malloc(sizeof(SqQueue));
if (q == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
q->queue = (ElemType*)malloc(QueueSize * sizeof(ElemType)); // 根据实际需要分配空间
if (q->queue == NULL) {
free(q);
return NULL;
}
q->front = -1; // 空队列标记
q->rear = -1;
q->size = 0;
return q;
}
// 入队函数
int enQueue(SqQueue* q, ElemType e) {
if (q->size == QueueSize) { // 队列已满
printf("Queue is full.\n");
return 0;
}
q->rear = (q->rear + 1) % QueueSize; // 使用循环队列策略
q->queue[q->rear] = e;
q->size++;
return 1;
}
// 出队函数
int deQueue(SqQueue* q, ElemType* result) {
if (q->size <= 0) { // 队列为空
printf("Queue is empty.\n");
return 0;
}
*result = q->queue[q->front];
q->front = (q->front + 1) % QueueSize;
q->size--;
return 1;
}
阅读全文