24 顺序队列(循环队列)
//循环队列 #include<stdio.h> #include<stdlib.h> #define Capacity 6 typedef struct Queue { int data[Capacity]; int front; //队头指针 int rear; //队尾指针 }queue; queue initQueue(queue Q) { for (int i = 0; i < Capacity; i++) { Q.data[i] = -1; } return Q; } //入队列 queue push(queue Q, int elem) { if ((Q.rear+1)%Capacity==Q.front) { //循环队列判 满 的条件 printf("队列满了\n"); return; } Q.data[Q.rear] = elem; //Q.rear++; Q.rear = (Q.rear + 1) % Capacity; return Q; } //出队列 queue pop(queue Q) { if (Q.front == Q.rear) { //循环队列判 空 的条件 printf("队列空了:\n"); return; } printf("出队列元素是:%d\n", Q.data[Q.front]); //Q.front++; Q.front = (Q.front + 1) % Capacity; return Q; } void showQueue(queue Q) { for (int i = Q.front; i < Capacity; i++) { printf("%d ", Q.data[i]); } printf("\n"); } void main() { struct Queue myqueue; myqueue.front = myqueue.rear = 0; myqueue = initQueue(myqueue); printf("初始化队列是:\n"); showQueue(myqueue); printf("队头指针是:%d\n", myqueue.front); printf("队尾指针是:%d\n", myqueue.rear); printf("将10,20,30,40,50入队列后:\n"); myqueue = push(myqueue, 10); myqueue = push(myqueue, 20); myqueue = push(myqueue, 30); myqueue = push(myqueue, 40); myqueue = push(myqueue, 50); showQueue(myqueue); printf("队头指针是:%d\n", myqueue.front); printf("队尾指针是:%d\n", myqueue.rear); printf("队头元素出队列后:\n"); myqueue = pop(myqueue); showQueue(myqueue); printf("队头指针是:%d\n", myqueue.front); printf("队尾指针是:%d\n", myqueue.rear); printf("将100入队列:\n"); myqueue = push(myqueue, 100); showQueue(myqueue); printf("队头指针是:%d\n", myqueue.front); printf("队尾指针是:%d\n", myqueue.rear); }
循环队列 入队 : rear = (rear + 1)% M ;
循环队列 出队 :front = ( front + 1 ) % M ;
循环队列 判空:Q.front == Q.rear
循环队列 判 满:(Q.rear + 1 ) % M == Q.front ;
循环队列求长度:( M + rear - front ) % M ;