循环队列(c++)
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #define MaxSize 10 typedef int elemtype; typedef struct { int front; int rear; elemtype data[MaxSize]; }SqQueue; int initQueue(SqQueue* Q) { Q->front = 0; Q->rear = 0; return 0; } int Size_Queue(SqQueue* Q) { return (Q->rear - Q->front + MaxSize) % MaxSize; } int EnQueue(SqQueue* Q, elemtype e) { if ((Q->rear + 1) % MaxSize == Q->front) { printf("队列已满!\n"); return 0; } Q->data[Q->rear] = e; Q->rear = (Q->rear + 1) % MaxSize; return 0; } int DeQueue(SqQueue* Q, elemtype* e) { if (Q->front == Q->rear) { printf("队列为空!\n"); return 0; } *e = Q->data[Q->front]; Q->front = (Q->front + 1) % MaxSize; return 0; } void Show_Queue(SqQueue* Q) { int i = Q->front; if (Q->front == Q->rear) { printf("队列为空!\n"); return; } printf("当前队列元素为:"); while ((Q->front) % MaxSize != Q->rear) { if (Q->front == MaxSize) { Q->front %= MaxSize; } printf(" %d ", Q->data[Q->front]); Q->front++; } printf("\n"); Q->front = i; } int main() { SqQueue Q; elemtype m; initQueue(&Q); Size_Queue(&Q); Show_Queue(&Q); printf("当前队列长度为:%d\n", Size_Queue(&Q)); EnQueue(&Q, 5); EnQueue(&Q, 15); EnQueue(&Q, 25); EnQueue(&Q, 35); EnQueue(&Q, 45); Show_Queue(&Q); printf("当前队列长度为:%d\n", Size_Queue(&Q)); DeQueue(&Q, &m); Show_Queue(&Q); printf("当前队列长度为:%d\n", Size_Queue(&Q)); printf("被删除元素为:%d\n", m); }
重点:
通用的计算队列长度公式:(Q->rear - Q->front + MAXSIZE) % MAXSIZE
队列满的判断:(Q->rear + 1) % MAXSIZE == Q->front
队列为空的判断:Q->front == Q->rear
front指针向后移:Q->front = (Q->front + 1) % MAXSIZE
rear指针向后移:Q->rear = (Q->rear + 1) % MAXSIZE

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号