---------------------------------
定义 循环队列
初始化 队列
入队
出队
遍历
是否已满
是否已空
---------------------------------
// 定义 循环队列 typedef struct Queue { int * pBase;// 底层数组 int front; // 队首 下标 int rear; // 队尾 下标 } QUEUE;
// 初始化 队列 void init(QUEUE * qQueue) { printf("输入循环队列的长度 : "); scanf("%d", &queueLen); // 数组 qQueue->pBase = (int *) malloc( sizeof(int) * queueLen ); // qQueue->front = 0; qQueue->rear = 0; return; }
// 入队 bool enterQueue(QUEUE * pQueue, int value) { if ( isFull(pQueue) ) { return false; } // 在 rear 索引处 放入值 pQueue->pBase[pQueue->rear] = value; // rear 索引 加1 pQueue->rear = (pQueue->rear + 1) % queueLen; return true; }
// 出队 bool outQueue(QUEUE * pQueue, int * pValue) { if ( isEmpty(pQueue) ) { return false; } // 记录出队的元素的值 *pValue = pQueue->pBase[pQueue->front]; // 出队 pQueue->front = (pQueue->front + 1) % queueLen; return true; }
// 遍历 void traverseQueue(QUEUE * pQueue) { printf("======遍历======\n"); int start = pQueue->front; for (; start != pQueue->rear; start = (start + 1) % queueLen) { printf("%d\n", pQueue->pBase[start]); } return; }
// 判断队列是否已满 bool isFull(QUEUE * pQueue) { if ( (pQueue->rear + 1) % queueLen == pQueue->front ) { return true; } return false; }
// 判断队列是否已空 bool isEmpty(QUEUE * pQueue) { if (pQueue->rear == pQueue->front) { return true; } return false; }
#include <stdio.h> #include <malloc.h> #include <stdbool.h> int queueLen; // 全局变量, 队列长度 // 定义 循环队列 typedef struct Queue { int * pBase;// 底层数组 int front; // 队首 下标 int rear; // 队尾 下标 } QUEUE; // 初始化 队列 void init(QUEUE * qQueue); // 入队 bool enterQueue(QUEUE * pQueue, int value); // 出队 bool outQueue(QUEUE * pQueue, int * pValue); // 遍历 void traverseQueue(QUEUE * pQueue); // 判断队列是否已满 bool isFull(QUEUE * pQueue); // 判断队列是否已空 bool isEmpty(QUEUE * pQueue); int main(void) { QUEUE queue; // 初始化 init(&queue); // 入队 int count; for (count = 0; count < 4; ++count) { if ( ! enterQueue(&queue, count + 1) ) { printf("%d, 入队失败!!!\n", count + 1); continue; } printf("%d, 入队成功!\n", count + 1); } // 遍历 traverseQueue(&queue); // 出队 int value; for (count = 0; count < 13; ++count) { if (outQueue(&queue, &value)) { printf("出队成功, 出队元素的值: %d\n", value); continue; } printf("出队失败, 再接再励!!\n"); } traverseQueue(&queue); return 0; } // 初始化 队列 void init(QUEUE * qQueue) { printf("输入循环队列的长度 : "); scanf("%d", &queueLen); // 数组 qQueue->pBase = (int *) malloc( sizeof(int) * queueLen ); // qQueue->front = 0; qQueue->rear = 0; return; } // 入队 bool enterQueue(QUEUE * pQueue, int value) { if ( isFull(pQueue) ) { return false; } // 在 rear 索引处 放入值 pQueue->pBase[pQueue->rear] = value; // rear 索引 加1 pQueue->rear = (pQueue->rear + 1) % queueLen; return true; } // 判断队列是否已满 bool isFull(QUEUE * pQueue) { if ( (pQueue->rear + 1) % queueLen == pQueue->front ) { return true; } return false; } // 遍历 void traverseQueue(QUEUE * pQueue) { printf("======遍历======\n"); int start = pQueue->front; for (; start != pQueue->rear; start = (start + 1) % queueLen) { printf("%d\n", pQueue->pBase[start]); } return; } // 出队 bool outQueue(QUEUE * pQueue, int * pValue) { if ( isEmpty(pQueue) ) { return false; } // 记录出队的元素的值 *pValue = pQueue->pBase[pQueue->front]; // 出队 pQueue->front = (pQueue->front + 1) % queueLen; return true; } // 判断队列是否已空 bool isEmpty(QUEUE * pQueue) { if (pQueue->rear == pQueue->front) { return true; } return false; }