队列的操作
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <malloc.h> typedef struct Queue { int * pBase; //数组的首地址 int front; int rear; }QUEUE; void init(QUEUE * ); bool en_queue(QUEUE *, int ); void traverse_queue(QUEUE *); bool full_queue(QUEUE *); bool out_queue(QUEUE * , int * ); bool emput_queue(QUEUE *); int main() { QUEUE Q; int val; init(&Q); /*en_queue(&Q, 1); en_queue(&Q, 2); en_queue(&Q, 3); en_queue(&Q, 4); en_queue(&Q, 5); en_queue(&Q, 6); en_queue(&Q, 7); en_queue(&Q, 8);*/ traverse_queue(&Q); if(out_queue(&Q, &val)) printf("出队成功,队列出队的元素是: %d\n", val); else printf("出队失败!\n"); traverse_queue(&Q); return 0; } void init(QUEUE * pQ) { pQ->pBase = (int *)malloc(sizeof(int)*6); pQ->front = 0; pQ->rear = 0; } bool full_queue(QUEUE * pQ) { if((pQ->rear+1)%6==pQ->front) return true; else return false; } void traverse_queue(QUEUE * pQ) //从头部遍历 { int i = pQ->front; while(i!=pQ->rear) { printf("%d ", pQ->pBase[i]); i = (i+1)%6; } printf("\n"); return; } bool en_queue(QUEUE * pQ, int val) //入队 { if(full_queue(pQ)) return false; else { pQ->pBase[pQ->rear] = val; pQ->rear = (pQ->rear+1)%6; return true; } } bool emput_queue(QUEUE * pQ) //判断队空 { if(pQ->rear==pQ->pBase) return true; else return false; } bool out_queue(QUEUE * pQ, int * pVal) { if(emput_queue(pQ)) { return false; } else { *pVal = pQ->pBase[pQ->front]; pQ->front = (pQ->front+1)%6; return true; } }