日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

顺序表循环队列:创建初始化、入队、出队、获取队列头数据、计算队列有效数据长度...

發布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序表循环队列:创建初始化、入队、出队、获取队列头数据、计算队列有效数据长度... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*
??? 順序表隊列
??? 初始化
??? 入隊列
??? 出隊列
??? 取隊列頭數據
??? 計算隊列有效長度
*/

#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

總結

以上是生活随笔為你收集整理的顺序表循环队列:创建初始化、入队、出队、获取队列头数据、计算队列有效数据长度...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。