循环队列的基本功能:
#include#include #include #define MAX_SIZE 1000 #define OVERFLOW 1 typedef struct CircleIntQueue{ int data[MAX_SIZE]; int head; int tail; }CircleIntQueuer,*circleintqueue; circleintqueue initQueue() { circleintqueue resultPtr = (circleintqueue)malloc(sizeof(CircleIntQueue)); resultPtr->head = 0; resultPtr->tail = 0; return resultPtr; } void enqueue(circleintqueue paraPtr, int Value) { if ((paraPtr->tail + 1) % MAX_SIZE == paraPtr->head) { printf("队列已满!!rn"); exit(OVERFLOW); } paraPtr->data[paraPtr->tail % MAX_SIZE] = Value; paraPtr->tail++; } int dequeue(circleintqueue paraPtr) { int resultValue; if (paraPtr->head == paraPtr->tail) { printf("队列为空.rn"); return -1; } // Of if resultValue = paraPtr->data[paraPtr->head % MAX_SIZE]; paraPtr->head++; return resultValue; } void outputLinkQueue(circleintqueue paraPtr){ int i; if (paraPtr->head == paraPtr->tail) { printf("队列为空."); return; } printf("队列的元素:"); for (i = paraPtr->head; i < paraPtr->tail; i++) { printf("%d ", paraPtr->data[i % MAX_SIZE]); } printf("rn"); } void testLinkQueue(){ int i = 10; circleintqueue tempPtr = initQueue(); for (; i < 16; i ++) { enqueue(tempPtr, i); } outputLinkQueue(tempPtr); for (i = 0; i < 6; i ++) { printf(" 依次出队:%drn", dequeue(tempPtr)); } enqueue(tempPtr, 8); printf("入队8后:") ; outputLinkQueue(tempPtr); } int main(){ testLinkQueue(); return 1; }
运行结果:
总结:
队列为空和队列已满,前后指针都指向同一位置。这时要注意分辨情况



