1. 程式人生 > 實用技巧 >資料結構--佇列

資料結構--佇列

include<stdio.h>

include<malloc.h>

typedef struct Queue
{
int * pBase;
int front;
int rear;
}QUEUE,*PQUEUE;

void init_queue(PQUEUE);//初始化
bool en_queue(PQUEUE,int);//入隊
void traverse_queue(PQUEUE);//輸出
bool empty(PQUEUE pQ);//判斷佇列是否為空
bool full_queue(PQUEUE pQ);//判斷佇列是否為滿
bool dequeue(PQUEUE,int *);//出隊

int main(void)
{
int val;//存放出隊的臨時值

QUEUE Q;

init_queue(&Q);//初始化

en_queue(&Q,1);//入隊
en_queue(&Q,2);
en_queue(&Q,3);
en_queue(&Q,4);
en_queue(&Q,5);
traverse_queue(&Q);//輸出

if(dequeue(&Q,&val))
{
	printf("出隊成功,出隊的元素值為:%d\n",val);
}
else
{
	printf("佇列為空!\n");
}
	
return 0;

}

//出隊
bool dequeue(PQUEUE pQ, int * pVal)
{
if(empty(pQ))
return false;
else
{
*pVal = pQ->pBase[pQ->front];
pQ->front = (pQ->front+1)%6;//front取餘於佇列長度,用來迴圈陣列,

	return true;
}

}

//輸出
void traverse_queue(PQUEUE pQ)
{

if(empty(pQ))
{
	printf("佇列為空!\n");
}
else
{
	int p = pQ->front;
	
	while(p != pQ->rear)
	{
		printf("%d,", pQ->pBase[p]);
		p = (p+1) % 6;
		
	}
	printf("\n");
}

return;

}

//判斷佇列是否為滿,陣列中設定一定不存放有效資料的元素,
//當入隊時,在rear與front相鄰時,佇列為滿
bool full_queue(PQUEUE pQ)
{
if(pQ->front == (pQ->rear+1)%6)//rear取餘於佇列長度,用來迴圈陣列,
{
return true;
}

else
{
	return false;
}
;

}

//判斷佇列是否為空
bool empty(PQUEUE pQ)
{
if(pQ->front == pQ->rear)
return true;
else
return false;
}

//入隊
bool en_queue(PQUEUE pQ,int val)
{
if(full_queue(pQ))

{
	return false;
}

else
{
	pQ->pBase[pQ->rear] = val;
	pQ->rear = (pQ->rear+1) % 6;//rear取餘於佇列長度,用來迴圈陣列,
	
	return true;
}

}

//初始化
void init_queue(PQUEUE pQ)
{

pQ->pBase  = (int *)malloc(sizeof(int) * 6);//陣列長度為6個元素
pQ->front = 0;
pQ->rear = 0;
return;

}