用c语言写队列的链队列的初始化,入队,出队,取队头,队列长度;循环队列的初始化,入队,出队,取队头,队列长度;
时间: 2023-10-08 08:08:01 浏览: 108
链队列的初始化、入队、出队、取队头、队列长度的C语言代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链队列的节点结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 定义链队列结构体
typedef struct {
Node *front; // 队头指针
Node *rear; // 队尾指针
int length; // 队列长度
} LinkQueue;
// 初始化链队列
void initLinkQueue(LinkQueue *queue) {
queue->front = queue->rear = (Node *) malloc(sizeof(Node));
if (queue->front == NULL) {
printf("初始化链队列失败!\n");
exit(1);
}
queue->front->next = NULL;
queue->length = 0;
}
// 入队
void enLinkQueue(LinkQueue *queue, int data) {
Node *newNode = (Node *) malloc(sizeof(Node));
if (newNode == NULL) {
printf("链队列已满,入队失败!\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
queue->rear->next = newNode;
queue->rear = newNode;
queue->length++;
}
// 出队
void deLinkQueue(LinkQueue *queue) {
if (queue->front == queue->rear) {
printf("链队列为空,出队失败!\n");
exit(1);
}
Node *p = queue->front->next;
queue->front->next = p->next;
if (p == queue->rear) {
queue->rear = queue->front;
}
free(p);
queue->length--;
}
// 取队头元素
int getLinkQueueFront(LinkQueue *queue) {
if (queue->front == queue->rear) {
printf("链队列为空,取队头元素失败!\n");
exit(1);
}
return queue->front->next->data;
}
// 获取链队列长度
int getLinkQueueLength(LinkQueue *queue) {
return queue->length;
}
```
循环队列的初始化、入队、出队、取队头、队列长度的C语言代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义循环队列结构体
typedef struct {
int *data; // 存储队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
int length; // 队列长度
int size; // 队列容量
} CircleQueue;
// 初始化循环队列
void initCircleQueue(CircleQueue *queue, int size) {
queue->data = (int *) malloc(sizeof(int) * size);
if (queue->data == NULL) {
printf("初始化循环队列失败!\n");
exit(1);
}
queue->front = queue->rear = 0;
queue->length = 0;
queue->size = size;
}
// 入队
void enCircleQueue(CircleQueue *queue, int data) {
if ((queue->rear + 1) % queue->size == queue->front) {
printf("循环队列已满,入队失败!\n");
exit(1);
}
queue->data[queue->rear] = data;
queue->rear = (queue->rear + 1) % queue->size;
queue->length++;
}
// 出队
void deCircleQueue(CircleQueue *queue) {
if (queue->front == queue->rear) {
printf("循环队列为空,出队失败!\n");
exit(1);
}
queue->front = (queue->front + 1) % queue->size;
queue->length--;
}
// 取队头元素
int getCircleQueueFront(CircleQueue *queue) {
if (queue->front == queue->rear) {
printf("循环队列为空,取队头元素失败!\n");
exit(1);
}
return queue->data[queue->front];
}
// 获取循环队列长度
int getCircleQueueLength(CircleQueue *queue) {
return queue->length;
}
```
阅读全文