数据结构(严蔚敏)之五——循环队列(c语言实现)
生活随笔
收集整理的這篇文章主要介紹了
数据结构(严蔚敏)之五——循环队列(c语言实现)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在這里我先強(qiáng)調(diào)幾點(diǎn)概念:
1、在非空隊(duì)列中,頭指針始終指向隊(duì)列頭元素,而尾指針始終指向隊(duì)列尾元素的下一個(gè)位置。
2、在單隊(duì)列中我們判斷隊(duì)列是否為空的條件是:Q.front==Q.rear;而在循環(huán)隊(duì)列中只憑等式Q.front==Q.rear是無(wú)法判別隊(duì)列是“空”還是“滿(mǎn)”;可有兩種處理方法:其一是另設(shè)一個(gè)標(biāo)志位一區(qū)別隊(duì)列是“空”還是“滿(mǎn)”;其二是少用一個(gè)元素空間,約定以“隊(duì)列頭指針在隊(duì)列尾指針的下一位置(置換的下一位置)上”作為隊(duì)列呈“滿(mǎn)”狀態(tài)的標(biāo)志,即(Q.rear+1)%MAXQSIZE == Q.front.
隊(duì)列結(jié)構(gòu)的實(shí)現(xiàn):
#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; //初始化循環(huán)隊(duì)列 Status InitQueue(SqQueue &Q) {Q.base = (QElemType*)malloc(MaxQSize*sizeof(QElemType));if (Q.base == NULL){puts("分配內(nèi)存空間失敗!"); exit(OVERFLOW);}Q.front = Q.rear = 0;return 0; } //將循環(huán)隊(duì)列清空 Status ClearQueue(SqQueue &Q) {Q.front = Q.rear = 0; } //求隊(duì)列元素的個(gè)數(shù) Status QueueLength(SqQueue Q) {return (Q.rear - Q.front + MaxQSize) % MaxQSize; } //插入元素到循環(huán)隊(duì)列 Status EnSqQueue(SqQueue &Q, QElemType e) {if ((Q.rear + 1) % MaxQSize == Q.front){puts("隊(duì)列已滿(mǎn)!"); return ERROR; /*隊(duì)列滿(mǎn)*/}Q.base[Q.rear] = e; //元素e入隊(duì)Q.rear = (Q.rear + 1) % MaxQSize; //修改隊(duì)尾指針return OK; } //從循環(huán)隊(duì)列中刪除元素 Status DeSqQueue(SqQueue &Q, QElemType &e) {if (Q.front == Q.rear)return ERROR;e = Q.base[Q.front]; //取隊(duì)頭元素至eQ.front = (Q.front + 1) % MaxQSize; //修改隊(duì)頭指針,如果超內(nèi)存,循環(huán) return OK; } //判斷一個(gè)循環(huán)隊(duì)列是否為空隊(duì)列 Status isQueueEmpty(SqQueue Q) {if (Q.front == Q.rear)return TRUE;elsereturn FALSE; }測(cè)試代碼:
int main() {int i, e;SqQueue Q;InitQueue(Q);for (i=0; i<MaxQSize; i++) //只有MaxQSize個(gè)數(shù)據(jù)進(jìn)隊(duì)列EnSqQueue(Q, i);i = QueueLength(Q);printf("隊(duì)列里的元素有%d個(gè)\n", i);for (i=0; i<3; i++){DeSqQueue(Q, e);printf("%d ", e);}printf("\n");i = QueueLength(Q);printf("隊(duì)列里的元素有%d個(gè)\n", i);for (i=10; i<12; i++)EnSqQueue(Q, i);i = QueueLength(Q);printf("隊(duì)列里的元素有%d個(gè)\n", i);ClearQueue(Q);i = QueueLength(Q);printf("隊(duì)列里的元素有%d個(gè)\n", i);return 0; }運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的数据结构(严蔚敏)之五——循环队列(c语言实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DevOps是什么意思
- 下一篇: 爱奇艺程序员落户北京后离职被判赔 10