用循环数组实现队列的方法
来源:互联网 发布:淘宝客服图片发不出去 编辑:程序博客网 时间:2024/05/06 02:58
用数组实现表的方法可用于实现队列,但这样做的效果并不好。尽管可以用一个游标来指示队尾,使得EnterQueue运算在O(1)时间内完成,但是在执行DeleteQueue时,为了删除队首元素,必须将数组中其他元素都向前移动一个位置。这样队列中有n个元素时,执行DeleteQueue就需要n的时间。
为了提高运算的效率,采用另一种观点来处理数组中各单元的位置关系。设想数组queue[0:maxsize-1]中的单元不是排成一排,而是围成一个环,即queue[0]接在queue[maxsize-1]的后面。这种意义下的数组称为循环数组
#include<stdio.h>#include<stdlib.h>typedef struct aque*Queue;typedef struct aque{int maxsize;int front;int rear;int *queue; //循环数组}Aqueue;//*******************************//初始化Queue QueueInit(int size){Queue Q;Q=(Queue)malloc(sizeof(Aqueue));Q->queue=(int*)malloc(sizeof(int)*size);Q->front=Q->rear=0;Q->maxsize=size;return Q;}//*******************************//判断队列是否为空int QueueEmpty(Queue Q){return Q->front==Q->rear;}//*******************************//判断队列是否为满int QueueFull(Queue Q){return (Q->rear+1)%Q->maxsize==Q->front;}//*******************************//返回队列队首的值int QueueFirst(Queue Q){if(QueueEmpty(Q)){printf("queue is empty");exit(0);}return Q->queue[(Q->front+1)%Q->maxsize];}//*******************************//返回队列队尾的值int QueueLast(Queue Q){if(QueueEmpty(Q)){printf("queue is empty");exit(0);}return Q->queue[Q->rear];}//*******************************//新元素入队列void EnterQueue(int x,Queue Q){if(QueueFull(Q)){printf("queue is full");exit(0);}Q->rear=(Q->rear+1)%Q->maxsize;Q->queue[Q->rear]=x;}//删除队首元素int DeleteQueue(Queue Q){if(QueueEmpty(Q)){printf("queue is empty");exit(0);}Q->front=(Q->front+1)%Q->maxsize;return Q->queue[Q->front];}int main(){Queue Q;int size=20;Q=QueueInit(size);for(int i=1;i<=10;i++)EnterQueue(i,Q);for(i=1;i<=10;i++)printf("%d ",DeleteQueue(Q));return 0;}
- 用循环数组实现队列的方法
- 循环队列的数组实现
- 循环队列的数组实现!!
- 循环数组队列的实现
- Java数组实现循环队列的两种方法
- Java数组实现循环队列的两种方法
- 队列的数组实现(循环队列)
- 用循环数组实现队列
- 用数组实现循环队列
- 用循环数组实现队列
- 用循环数组实现队列
- 循环队列的实现方法
- 数组实现循环队列
- 数组实现循环队列
- 循环数组实现队列
- 循环队列--数组实现
- 数组实现循环队列
- 数组实现循环队列
- 设置默认信息的方法
- 描述在浏览器中敲入一个网址并按下回车后所发生的事情(尽量详细)
- 输出以个小于1万亿的正整数的拼音读法
- 2013-10-09 生活中点滴
- sql语言进行数据库批量插入
- 用循环数组实现队列的方法
- 如何使用google code
- MVC框架技术Struts2
- open函数参数及返回值
- CWindowImpl
- 杭电 oj 1001
- 扫描转换直线段--DDA算法
- Howto: Ubuntu下的AMSS编译环境配置
- OpenStack常用命令小结