迴圈佇列全部操作實現程式碼(C語言)
阿新 • • 發佈:2018-12-26
棧和佇列不愧為親兄弟,在棧的實現基礎上簡單改改即可實現佇列全部操作,加上迴圈二字,也就是多了個%取餘(模)運算,放上成果,立碼為證:
/* 實現迴圈佇列的全體操作 */ #include "stdio.h" #define MAXSIZE 50 #define TRUE 1 #define FALSE 0 typedef int bool; //Cpp中這一行要取消掉,他內建bool型 typedef int Status; //函式型別,其值是函式結果狀態碼 typedef int ElemType; //資料型別 typedef struct queue { ElemType Data[MAXSIZE]; int front,rear; }SqQueue; void InitQueue(SqQueue *q)//初始化佇列 { q->rear=q->front=0; //一定要賦值,否則會出野指標 } bool QueueEmpty(SqQueue *q)//判隊空 { if(q->rear==q->front) return TRUE; else return FALSE; } bool EnQueue(SqQueue *q,ElemType e)//入隊 { if((q->rear+1)%MAXSIZE==q->front) //隊滿 { printf("Queue is Full\n"); return FALSE; } q->Data[q->rear]=e; q->rear=(q->rear+1)%MAXSIZE;//隊尾指標加1取模 printf("EnQueue data %d into Queue \n",e); return TRUE; } bool DeQueue(SqQueue *q,ElemType *e)//出隊 { if(q->rear==q->front) { printf("Queue is Empty\n"); return FALSE; } *e=q->Data[q->front];//先取數再移指標 q->front=(q->front+1)%MAXSIZE; //隊頭指標加1取模 printf("DeQueue data is %d\n",*e); return TRUE; } bool GetFront(SqQueue *q,ElemType *e)//取隊頭元素 { if(q->rear==q->front) return FALSE; *e=q->Data[q->front]; printf("GetFront data is %d\n",*e); return TRUE; } int main() { SqQueue FS,*FSPtr; FSPtr=&FS; ElemType a=1,b=2,c=3; ElemType *x=&a; //用來返回彈出或取出的元素 ,一定要賦初值,否則野指標 int i; InitQueue(FSPtr); printf("%s\n",QueueEmpty(FSPtr)==TRUE?"Queue is Empty":"Queue is not Empty"); EnQueue(FSPtr,a); printf("%s\n",QueueEmpty(FSPtr)==TRUE?"Queue is Empty":"Queue is not Empty"); EnQueue(FSPtr,b); EnQueue(FSPtr,c); for(i=0;i<50;i++) //順序壓0-49數字入隊 { EnQueue(FSPtr,i); } DeQueue(FSPtr,x); printf("DeQueue data is %d\n",*x); GetFront(FSPtr,x); for(i=0;i<20;i++) //順序出隊 20次 { DeQueue(FSPtr,x); } printf("The Queue is:\n"); for(i=(FSPtr->front)%MAXSIZE;i<(FSPtr->rear)%MAXSIZE;i++) //輸出全隊 { printf("%d ",FSPtr->Data[i]); } getchar(); return 0; }