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 ;

浙公网安备 33010602011771号