#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
typedef int DataType;
// 数据节点
typedef struct Node{
DataType data;
struct Node* next;
}Node;
// 前后指针
typedef struct LinkQueue{
struct Node* front;
struct Node* rear;
}LinkQueue;
bool queueEmpty(LinkQueue *queue);
bool enQueue(LinkQueue *queue, int i);
DataType getHead(LinkQueue *queue);
DataType deQueue(LinkQueue *queue);
int length(LinkQueue *queue);
int main() {
// 初始化
Node node = {0, NULL};
LinkQueue lq;
LinkQueue* linkQueue = &lq;
linkQueue->front = &node; // 一开始队头与队尾指针都指向头结点
linkQueue->rear = &node;
length(linkQueue);
bool a = queueEmpty(linkQueue);
printf("队列长度:%d\n", length(linkQueue));
printf("入队:5、4、3\n");
enQueue(linkQueue, 5); // 入队
enQueue(linkQueue, 4);
enQueue(linkQueue, 3);
printf("队列长度:%d\n", length(linkQueue));
printf("出队:%d\n", deQueue(linkQueue));
printf("队头元素:%d\n", getHead(linkQueue));
return 0;
}
/**
* 返回队列长度
* @param queue
* @return
*/
int length(LinkQueue *queue) {
return queue->front->data;
}
/**
* 获取队首值
* @param queue
* @return
*/
DataType getHead(LinkQueue* queue) {
if (queueEmpty(queue)) {
return -1;
}
return queue->front->next->data;
}
/**
* 出队
* @param queue
* @return
*/
DataType deQueue(LinkQueue *queue) {
if (queueEmpty(queue)) {
return -1;
}
Node *temp = queue->front->next;
int data = temp->data;
queue->front->next = temp->next;
// 判断是否删除的是最后一个节点
if (temp == queue->rear) {
// 若删除的是最后一个节点,则rear应指向头结点,此时队列为空
queue->rear = queue->front;
}
free(temp);
queue->front->data--;
return data;
}
/**
* 入队
* @param queue
* @param value
* @return
*/
bool enQueue(LinkQueue *queue, int value) {
queue->front->data++;
Node *temp = (Node *) malloc(sizeof(Node));
temp->data = value;
temp->next = NULL;
// 节点添加到队尾
queue->rear->next = temp;
queue->rear = temp;
return true;
}
/**
* 判断对空
* @param queue
* @return
*/
bool queueEmpty(LinkQueue *queue) {
return queue->front == queue->rear;
}
数据结构------链式队列(C/C++)
最新推荐文章于 2024-07-06 22:34:06 发布