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 ;

 

posted @ 2020-03-29 21:56  shanlu  阅读(206)  评论(0编辑  收藏  举报