循环队列

来源:互联网 发布:淘宝网睡衣家居服 编辑:程序博客网 时间:2024/05/21 13:22

队列分为两种,一种是链式队列,一种是静态队列,而静态队列一般通过循环队列来实现。下面是一个简单的循环队列的程序。

#include<stdio.h>#include<malloc.h>typedef struct queue{int *pBase;int rear;int front;}QUEUE;void init_queue(QUEUE*);//初始化队列void en_queue(QUEUE*,int );//入队bool full_queue(QUEUE*);//判断是否已满bool empty_queue(QUEUE*);//判断是否为空void traverse_queue(QUEUE*);void out_queue(QUEUE*);int main(){QUEUE Queue;init_queue( &Queue);en_queue(&Queue,4);en_queue(&Queue,5);en_queue(&Queue,6);en_queue(&Queue,7);en_queue(&Queue,8);en_queue(&Queue,9);en_queue(&Queue,10);en_queue(&Queue,11);traverse_queue(&Queue);out_queue(&Queue);traverse_queue(&Queue);free(Queue.pBase);return 0;}void init_queue(QUEUE* Queue){Queue->pBase = (int*)malloc(sizeof(int) * 6);Queue->front = Queue->rear = 0;}void en_queue(QUEUE* Queue,int val){if(full_queue(Queue))printf("队列已满\n");else{Queue->pBase[Queue->rear] = val;Queue->rear = (Queue->rear + 1)%6;}}bool full_queue(QUEUE* Queue){if((Queue->rear+1)%6 == Queue->front)return true;else return false;}bool empty_queue(QUEUE *Queue){if(Queue->front == Queue->rear)return true;elsereturn false;}void  traverse_queue(QUEUE* Queue){int q =Queue->front;while(q != Queue->rear){printf("%d",Queue->pBase[q]);q = (q+1)%6;}printf("\n");}void out_queue(QUEUE*Queue){if(empty_queue(Queue))printf("队列是空的\n");else{int pval = 0; pval = Queue->pBase[Queue->front];//存放删除元素的值Queue->front = (Queue->front + 1)%6;}}


程序执行的结果是:

 

今天是国庆节的第二天,早上起来后写的一个关于队列的程序。上一年的国庆节去了张家界,觉得蛮好玩的。现在阳光明媚,是适合出去玩的好时光,必经大学时间越来越少了。由于准备找工作,这个国庆假期就这样搁浅了。不知道以后还有多少这样的晴天?

原创粉丝点击