1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数据结构-循环队列(C语言代码)

数据结构-循环队列(C语言代码)

时间:2019-05-29 01:46:39

相关推荐

数据结构-循环队列(C语言代码)

循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。

循环队列可以更简单防止伪溢出的发生,但队列大小是固定的。

在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件是front=rear,而队列判满的条件是front=(rear+1)%MaxSize

#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5typedef struct Queue {int fornt;int rear;int data[MAXSIZE];}Queue;//初始化循环队列Queue* initQueue() {Queue* Q = (Queue*)malloc(sizeof(Queue));Q->fornt = Q->rear = 0;return Q;}//判断队满int isFull(Queue* Q) {if ((Q->rear + 1)%MAXSIZE == Q->fornt) {return 1;}else {return 0;}}//入队int enQueue(Queue* Q, int data) {Queue* q = (Queue*)malloc(sizeof(Queue));if (isFull(Q)) {return 0;}else {Q->data[Q->rear] = data;Q->rear = (Q->rear + 1) % MAXSIZE;return 1;}}//判断为空int isEmpty(Queue* Q) {if (Q->fornt == Q->rear) {return 1;}else {return 0;}}//出队int deQueue(Queue* Q) {if (isEmpty(Q)) {return -1;}else {int data = Q->data[Q->fornt];Q->fornt = (Q->fornt + 1) % MAXSIZE;return data;}}//遍历队列void printQueue(Queue* Q) {//要知道队列当前有多少个元素int length = (Q->rear - Q->fornt + MAXSIZE) % MAXSIZE;int index = Q->fornt;for (int i = 0; i < length; i++) {printf("%d->", Q->data[index]);index = (index + 1)%MAXSIZE;}printf("NULL\n");}int main(void){Queue* Q = initQueue();enQueue(Q, 1);enQueue(Q, 2);enQueue(Q, 3);enQueue(Q, 4);printQueue(Q);deQueue(Q);printQueue(Q);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。