码迷,mamicode.com
首页 > 其他好文 > 详细

循环列队的循序结构

时间:2015-01-31 19:27:25      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:列队   循环列队   列队的插入删除操作   列队的循序存储结构   

</pre><pre name="code" class="cpp">//1.队列顺序结构的定义

#define MAXQSIZE 100
typedef struct 
{
	QElemType base[MAXQSIZE];//静态数组
	int front;//队列头指针
	int rear;//队列尾指针
}SqQueue;

//解决队列的假溢出方法
//1.将循序列队臆造为一个环状空间。尾指针指向头指针
//2.在对满的情况下,rear指针和front指针会指向同一个节点元素。
//这时候就相当于对空,因为队列为空的情况下,rear和front指针指向同一元素

//循环队列怎么区分对空和对满呢???
//解决办法;

//1.因出对而相等,则为空。因入队而相等,则为满
//2.少用一个元素的空间,约定rear+1=front时,就认为对满


//2.循环队列,队列顺序存储结构的虚拟实现

#define MAXQSIZE 100//最大列队长度
typedef struct 
{
	QElemType *base;//初始化的动态分配存储空间
	int front;//头指针,若对不空,指向队列头元素
	int rear;//尾指针,若队列不空,指向队尾元素的下一位置
}SqQueue;

//3.基本操作

Status InitQueue(SqQueue &Q)
{
	//构造一个空队列Q
	Q.base=(QElemType*)malloc(//开辟队列的内存空间
		MAXQSIZE*sizeof(QElemType));
	if(!Q.base)//如果队尾不存在,那么开辟空间失败
		exit(OVERFLOW);
	Q.front=Q.rear=0;//空队列
	return OK;
}


//4.求队列长度

int QueueLength (SqQueue Q)
{//返回Q的元素个数,即队列的长度
	return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
	//由于rear也可能小于front,所以这个方法比较实用,相当于求
	//rear-front的绝对值。
}

//5.插入元素E为Qde 新队尾元素

Status EnQueue(SqQueue &Q,QElemType e)
{
	if((Q.rear+1)%MAXQSIZE==Q.front)//判断是否为对满
		return ERROR;
	Q.base[Q.rear]=e;//让新插入的元素为队尾元素
	Q.rear=(Q.rear+1)%MAXQSIZE;//移动到下一位,如果对满,那么取余到达第一元素位置
	return OK;
}

//6.入队和出队
//入队:rear=rear+1;入队队尾元素加一a4->a5->a6;一次增加
//出队:front=front+1  出队时队首元素加一a4->a3->a2->a1,从右到左出队

//7.若队不空,则删除队头元素,用e返回其值,否则,返回ERROR

Status DeQueue(SqQueue &Q,QElemType &e)
{
	if(Q.front==Q.rear)//如果队列为空,返回ERROR
		return ERROR;
		e=Q.base[Q.front];//把队首指针赋给e
	Q.front=(Q.front+1)%MAXQSIZE;//将队首指针向上移动一个位置
	//如果队满,则循环到第一个位置
	return OK;
}

循环列队的循序结构

标签:列队   循环列队   列队的插入删除操作   列队的循序存储结构   

原文地址:http://blog.csdn.net/u012989536/article/details/43342197

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!