c语言两种存储结构中队列的初始化、判队列空、入队列、出队列
时间: 2023-12-13 16:04:30 浏览: 94
c语言实现队列的建立,入队,出队
5星 · 资源好评率100%
在C语言中,队列可以使用两种存储结构来实现:数组和链表。
1. 数组实现队列的初始化、判队列空、入队列、出队列的操作:
```
// 定义队列结构
typedef struct {
int* array; // 存储队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
int size; // 队列的容量
} Queue;
// 初始化队列
void initQueue(Queue* q, int capacity) {
q->array = malloc(sizeof(int) * capacity);
q->front = q->rear = -1;
q->size = capacity;
}
// 判队列空
int isEmpty(Queue* q) {
return q->front == -1;
}
// 入队列
void enqueue(Queue* q, int data) {
if (q->rear == q->size - 1) {
printf("Queue is full\n");
return;
}
if (isEmpty(q)) {
q->front = q->rear = 0;
} else {
q->rear++;
}
q->array[q->rear] = data;
}
// 出队列
int dequeue(Queue* q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return -1;
}
int data = q->array[q->front];
if (q->front == q->rear) {
q->front = q->rear = -1;
} else {
q->front++;
}
return data;
}
```
2. 链表实现队列的初始化、判队列空、入队列、出队列的操作:
```
// 定义队列结点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 定义队列结构
typedef struct {
Node* front; // 队头指针
Node* rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue* q) {
q->front = q->rear = NULL;
}
// 判队列空
int isEmpty(Queue* q) {
return q->front == NULL;
}
// 入队列
void enqueue(Queue* q, int data) {
Node* newNode = malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (isEmpty(q)) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队列
int dequeue(Queue* q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return -1;
}
Node* temp = q->front;
int data = temp->data;
q->front = q->front->next;
free(temp);
if (q->front == NULL) {
q->rear = NULL;
}
return data;
}
```
阅读全文