1. 程式人生 > >迴圈佇列全部操作實現程式碼(C語言)

迴圈佇列全部操作實現程式碼(C語言)

棧和佇列不愧為親兄弟,在棧的實現基礎上簡單改改即可實現佇列全部操作,加上迴圈二字,也就是多了個%取餘(模)運算,放上成果,立碼為證:

/*
實現迴圈佇列的全體操作
						*/
#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;
}