顺序表循环队列:创建初始化、入队、出队、获取队列头数据、计算队列有效数据长度...
/*
??? 順序表隊列
??? 初始化
??? 入隊列
??? 出隊列
??? 取隊列頭數據
??? 計算隊列有效長度
*/
#include <stdio.h>
#include <stdlib.h>
#define QElemType unsigned int
typedef struct __QueueInfo{
??? int *data;
??? QElemType front;
??? QElemType rear;
??? unsigned int capacity;
}QueueInfo;
/* 初始化 */
int initQueue(QueueInfo **ppQ, unsigned int size)
{
??? if (NULL == ppQ)
??? {
??????? printf("Queue point address is not exist,error\n");
??????? return -1;
??? }
??? if (1 > size)
??? {
??????? printf("initQueue length: %d, error\n", size);
??????? return -1;
??? }
?? ?
??? QueueInfo *pNewQueue = (QueueInfo *)malloc(sizeof(QueueInfo));
??? if (NULL == pNewQueue)
??? {
??????? printf("initQueue malloc error\n");
??????? return -1;
??? }
?? ?
??? pNewQueue->data = (int *)malloc(sizeof(int)*size);
??? if (NULL == pNewQueue->data)
??? {
??????? printf("initQueue databuf malloc error\n");
??????? return -1;
??? }
??? pNewQueue->capacity = size;
??? pNewQueue->front = pNewQueue->rear = 0;
??? *ppQ = pNewQueue;
?? ?
??? return 0;
}
/* 入隊列 */
int pushQueue(QueueInfo *pQ, int val)
{
??? if (NULL == pQ)
??? {
??????? printf("Queue is NULL\n");
??????? return -1;
??? }
??? if ((pQ->rear + 1)%pQ->capacity == pQ->front)
??? {
??????? printf("Queue Full\n");
??????? return -1;
??? }
??? pQ->data[pQ->rear] = val;
??? pQ->rear = (pQ->rear +1)%pQ->capacity;
?? ?
??? return 0;
}
/* 出隊列 */
int popQueue(QueueInfo *pQ, int *val)
{
??? if (NULL == pQ)
??? {
??????? printf("Queue NULL\n");
??????? return -1;
??? }
??? if (pQ->rear == pQ->front)
??? {
??????? printf("Queue empty\n");
??????? return -1;
??? }
?? ?
??? *val = pQ->data[pQ->front];
??? pQ->front = (pQ->front + 1)%pQ->capacity;
?? ?
??? return 0;
}
/* 取隊列頭數據 */
int queueFront(QueueInfo *pQ, int *val)
{
??? if (NULL == pQ)
??? {
??????? printf("Queue is NULL\n");
??????? return -1;
??? }
?? ?
??? *val = pQ->data[pQ->front];
??? return 0;
}
/* 計算隊列有效數據長度 */
int queueCapacity(QueueInfo *pQ, unsigned int *size)
{
??? if (NULL == pQ)
??? {
??????? printf("Queue is NULL\n");
??????? return -1;
??? }
?? ?
??? if (pQ->front <= pQ->rear)
??? {
??????? *size = pQ->rear - pQ->front;
??? }
??? else
??? {
??????? *size = pQ->capacity - pQ->front + pQ->rear;
??? }
?? ?
??? return 0;
}
/* 測試程序入口 */
int main(void)
{
??? QueueInfo *pQueue = NULL;
??? int printValue = 0;
??? unsigned int sizeOfQueue = 0;
??? /* 隊列項為10 */
??? initQueue(&pQueue, 10);
??? /* 連續push11次,檢測是否會提示出錯 */
??? for (int i=0; i<11; i++)
??? {
??????? printValue = 0;
??????? sizeOfQueue = 0;
??????? pushQueue(pQueue, i);
??????? queueCapacity(pQueue, &sizeOfQueue);
??????? printf("pQueue capacity: %u\n", sizeOfQueue);
??????? queueFront(pQueue, &printValue);
??????? printf("pQueue front value: %d\n", printValue);
??? }
??? /* 連續pop11次,檢測是否會提示出錯 */
??? for (int i=0; i<11; i++)
??? {
??????? printValue = 0;
??????? sizeOfQueue = 0;
??????? queueCapacity(pQueue, &sizeOfQueue);
??????? printf("pQueue capacity: %u\n", sizeOfQueue);
??????? queueFront(pQueue, &printValue);
??????? printf("pQueue front value: %d\n", printValue);
??????? popQueue(pQueue, &printValue);
??????? printf("pQueue pop value: %d\n", printValue);
??? }
?? ?
??? free(pQueue);
??? return 0;
}
轉載于:https://www.cnblogs.com/tedani/p/9989122.html
總結
以上是生活随笔為你收集整理的顺序表循环队列:创建初始化、入队、出队、获取队列头数据、计算队列有效数据长度...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有关RSA 命令总结
- 下一篇: pm2自动部署