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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

大话数据结构 队列10:数组循环队列

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大话数据结构 队列10:数组循环队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎介紹

隊列 先進先出,出列在隊頭,進列在隊尾
數組可以做成循環隊列。

循環隊列的一個重要問題:判斷隊列是空是滿?

空隊列的判斷比較簡單:尾游標等于頭游標
滿隊列的判斷比較復雜:如果也是用尾游標等于頭游標則出現與空隊列相同的判斷條件,此時可以額外增加判斷標志位,還有第二種判斷方法,就是判斷尾游標和頭游標值差一個元素的時候。

代碼

#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存儲空間初始分配量 */typedef int Status; typedef int QElemType; /* QElemType類型根據實際情況而定,這里假設為int *//* 循環隊列的順序存儲結構 */ typedef struct {QElemType data[MAXSIZE];int front; /* 頭指針 */int rear; /* 尾指針,若隊列不空,指向隊列尾元素的下一個位置 */ }SqQueue;Status visit(QElemType c) {printf("%d ",c);return OK; }/* 初始化一個空隊列Q */ Status InitQueue(SqQueue *Q) {Q->front=0;Q->rear=0;return OK; }/* 將Q清為空隊列 */ Status ClearQueue(SqQueue *Q) {Q->front=Q->rear=0;return OK; }/* 若隊列Q為空隊列,則返回TRUE,否則返回FALSE */ Status QueueEmpty(SqQueue Q) { if(Q.front==Q.rear) /* 隊列空的標志 */return TRUE;elsereturn FALSE; }/* 返回Q的元素個數,也就是隊列的當前長度 */ int QueueLength(SqQueue Q) {return (Q.rear-Q.front+MAXSIZE)%MAXSIZE; }/* 若隊列不空,則用e返回Q的隊頭元素,并返回OK,否則返回ERROR */ Status GetHead(SqQueue Q,QElemType *e) {if(Q.front==Q.rear) /* 隊列空 */return ERROR;*e=Q.data[Q.front];return OK; }/* 若隊列未滿,則插入元素e為Q新的隊尾元素 */ Status EnQueue(SqQueue *Q,QElemType e) {if ((Q->rear+1)%MAXSIZE == Q->front) /* 隊列滿的判斷 */return ERROR;Q->data[Q->rear]=e; /* 將元素e賦值給隊尾 */Q->rear=(Q->rear+1)%MAXSIZE;/* rear指針向后移一位置, *//* 若到最后則轉到數組頭部 */return OK; }/* 若隊列不空,則刪除Q中隊頭元素,用e返回其值 */ Status DeQueue(SqQueue *Q,QElemType *e) {if (Q->front == Q->rear) /* 隊列空的判斷 */return ERROR;*e=Q->data[Q->front]; /* 將隊頭元素賦值給e */Q->front=(Q->front+1)%MAXSIZE; /* front指針向后移一位置, *//* 若到最后則轉到數組頭部 */return OK; }/* 從隊頭到隊尾依次對隊列Q中每個元素輸出 */ Status QueueTraverse(SqQueue Q) { int i;i=Q.front;while((i+Q.front)!=Q.rear){visit(Q.data[i]);i=(i+1)%MAXSIZE;}printf("\n");return OK; }int main() {Status j;int i=0,l;QElemType d;SqQueue Q;InitQueue(&Q);printf("初始化隊列后,隊列空否?%u(1:空 0:否)\n",QueueEmpty(Q));printf("請輸入整型隊列元素(不超過%d個),-1為提前結束符: ",MAXSIZE-1);do{/* scanf("%d",&d); */d=i+100;if(d==-1)break;i++;EnQueue(&Q,d);}while(i<MAXSIZE-1);printf("隊列長度為: %d\n",QueueLength(Q));printf("現在隊列空否?%u(1:空 0:否)\n",QueueEmpty(Q));printf("連續%d次由隊頭刪除元素,隊尾插入元素:\n",MAXSIZE);for(l=1;l<=MAXSIZE;l++){DeQueue(&Q,&d);printf("刪除的元素是%d,插入的元素:%d \n",d,l+1000);/* scanf("%d",&d); */d=l+1000;EnQueue(&Q,d);}l=QueueLength(Q);printf("現在隊列中的元素為: \n");QueueTraverse(Q);printf("共向隊尾插入了%d個元素\n",i+MAXSIZE);if(l-2>0)printf("現在由隊頭刪除%d個元素:\n",l-2);while(QueueLength(Q)>2){DeQueue(&Q,&d);printf("刪除的元素值為%d\n",d);}j=GetHead(Q,&d);if(j)printf("現在隊頭元素為: %d\n",d);ClearQueue(&Q);printf("清空隊列后, 隊列空否?%u(1:空 0:否)\n",QueueEmpty(Q));return 0; }

總結

以上是生活随笔為你收集整理的大话数据结构 队列10:数组循环队列的全部內容,希望文章能夠幫你解決所遇到的問題。

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