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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构(严蔚敏)之五——循环队列(c语言实现)

發布時間:2025/3/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构(严蔚敏)之五——循环队列(c语言实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在這里我先強調幾點概念:

1、在非空隊列中,頭指針始終指向隊列頭元素,而尾指針始終指向隊列尾元素的下一個位置。

2、在單隊列中我們判斷隊列是否為空的條件是:Q.front==Q.rear;而在循環隊列中只憑等式Q.front==Q.rear是無法判別隊列是“空”還是“滿”;可有兩種處理方法:其一是另設一個標志位一區別隊列是“空”還是“滿”;其二是少用一個元素空間,約定以“隊列頭指針在隊列尾指針的下一位置(置換的下一位置)上”作為隊列呈“滿”狀態的標志,即(Q.rear+1)%MAXQSIZE == Q.front.

隊列結構的實現:

#include <stdio.h> #include <malloc.h> typedef int QElemType; typedef int Status; #define MaxQSize 10 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -1 typedef struct {QElemType *base;int front, rear; }SqQueue; //初始化循環隊列 Status InitQueue(SqQueue &Q) {Q.base = (QElemType*)malloc(MaxQSize*sizeof(QElemType));if (Q.base == NULL){puts("分配內存空間失敗!"); exit(OVERFLOW);}Q.front = Q.rear = 0;return 0; } //將循環隊列清空 Status ClearQueue(SqQueue &Q) {Q.front = Q.rear = 0; } //求隊列元素的個數 Status QueueLength(SqQueue Q) {return (Q.rear - Q.front + MaxQSize) % MaxQSize; } //插入元素到循環隊列 Status EnSqQueue(SqQueue &Q, QElemType e) {if ((Q.rear + 1) % MaxQSize == Q.front){puts("隊列已滿!"); return ERROR; /*隊列滿*/}Q.base[Q.rear] = e; //元素e入隊Q.rear = (Q.rear + 1) % MaxQSize; //修改隊尾指針return OK; } //從循環隊列中刪除元素 Status DeSqQueue(SqQueue &Q, QElemType &e) {if (Q.front == Q.rear)return ERROR;e = Q.base[Q.front]; //取隊頭元素至eQ.front = (Q.front + 1) % MaxQSize; //修改隊頭指針,如果超內存,循環 return OK; } //判斷一個循環隊列是否為空隊列 Status isQueueEmpty(SqQueue Q) {if (Q.front == Q.rear)return TRUE;elsereturn FALSE; }測試代碼:

int main() {int i, e;SqQueue Q;InitQueue(Q);for (i=0; i<MaxQSize; i++) //只有MaxQSize個數據進隊列EnSqQueue(Q, i);i = QueueLength(Q);printf("隊列里的元素有%d個\n", i);for (i=0; i<3; i++){DeSqQueue(Q, e);printf("%d ", e);}printf("\n");i = QueueLength(Q);printf("隊列里的元素有%d個\n", i);for (i=10; i<12; i++)EnSqQueue(Q, i);i = QueueLength(Q);printf("隊列里的元素有%d個\n", i);ClearQueue(Q);i = QueueLength(Q);printf("隊列里的元素有%d個\n", i);return 0; }運行結果:





總結

以上是生活随笔為你收集整理的数据结构(严蔚敏)之五——循环队列(c语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

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