首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

循环队列解决方法

2012-04-11 
循环队列循环队列,要求头指针和尾指针对队列空值和队列满的判断,全部有关的代码,谢谢[解决办法]// 循环队

循环队列
循环队列,要求头指针和尾指针对队列空值和队列满的判断,全部有关的代码,谢谢

[解决办法]
// 循环队列.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#define MAXSIZE 8
#define ElemType char

//循环队列存储类型
typedef struct{
ElemType elem[MAXSIZE]; //数据元素
int front,rear; //队首,队尾指针
}SeqQueue;

//初始化:为未初始化的循环队列Q设置队首和队尾指针
void InitQueue(SeqQueue &Q)
{
Q.front=Q.rear=0; //空队列Q
}//InitQueue

//判队空:判断循环队列Q是否为空队列
int IsEmpty(SeqQueue &Q)
{
if(Q.rear==Q.front) 
return 1;
else 
return 0;
}//IsEmpty

//判队满:判循环队列Q是否为满
int IsFull(SeqQueue &Q)
{
if((Q.rear+1)%MAXSIZE==Q.front) 
return 1;
else 
return 0;
}//IsEmpty

//入队:向循环队列Q的队尾插入一个数据元素
int InQueue(SeqQueue &Q,ElemType e)
{
if(IsFull(Q))
{
printf("队列已经满!\n");
return 0; //当前存储空间已满
}
Q.elem[Q.rear]=e; //插入数据元素x
Q.rear=(Q.rear+1)%MAXSIZE;
return 1;
}//InQueue

//出队:删除循环队列Q的队首元素,并用e返回
int OutQueue(SeqQueue &Q,ElemType &e)
{
if(IsEmpty(Q)) 
{
printf("队列中不存在元素");
return 0; //空队列
}
e=Q.elem[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return 1;
}//OutQueue

//打印队列
int PriQueue(SeqQueue Q)
{
int i=0;
int p;
if(IsEmpty(Q)) 
{
printf("队列中不存在元素");
return 0; //空队列
}
p=Q.front;
printf("Q(");
while(p!=Q.rear)
{
printf("%c ",Q.elem[p++]);
}
printf(")");
return 1;
}

int QueueLength(SeqQueue Q)
{
return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
int main()
{
char e;
SeqQueue Q;
InitQueue(Q);
InQueue(Q,'a');
InQueue(Q,'b');
InQueue(Q,'c');
PriQueue(Q);
printf("\n队列的长度为:%d ",QueueLength(Q));
OutQueue(Q,e);
printf("%c",e);
printf("\n队列的长度为:%d ",QueueLength(Q));
return 0;
}

热点排行