資料結構--佇列
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;
}