现在的位置: 首页 > 综合 > 正文

算法基础(四):队列基础–循环队列

2014年04月10日 ⁄ 综合 ⁄ 共 1228字 ⁄ 字号 评论关闭

直接上代码:

#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define TRUE  1 
#define FALSE 0
#define OK    1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW   -2
#define MAX_SIZE   6
typedef int Status;					//函数返回值

typedef int QElemType;				//暂定元素类型为int,可以根据自己需要修改

typedef struct
{
	QElemType *base;				//初始化的动态分配存储空间
	int length;						//队列中元素个数
	int front;						
	int rear;						//定义队尾指针
}ForQueue;
 
Status InitQueue(ForQueue &Q);						//构造一个空队列
Status InsertQueue(ForQueue &Q,QElemType e);		//插入元素e为Q的队尾元素
Status DeQueue(ForQueue &Q);						//在队列不为空的情况下,删除队头元素

//入口测试函数

int _tmain(int argc, _TCHAR* argv[])				
{	 
	ForQueue Q;
	if(InitQueue(Q))
	{		 
		for(int i = 0;i<MAX_SIZE; i++)	//0~9自然数入队
		{
			if(InsertQueue(Q,i))
				printf("\n入队成功:%d",i);
			else printf("\n入队失败:%d",i);
		}
		printf("\n元素入队完毕...测试...");
		for(int i = 0;i<MAX_SIZE;i++)		 
		{						 
			printf("\n出队元素为:%d",DeQueue(Q));			 
		}
	}
	return 0;
}
Status InitQueue(ForQueue &Q)										//构造一个空队列
{
	Q.base = (QElemType *)malloc(MAX_SIZE * sizeof(QElemType));		//分配空间,指针指向该空间的首地址
	if(!Q.base)exit(OVERFLOW);
	Q.front = Q.rear = 0;
	Q.length = 0;								//初始长度为0
	return OK;
}
 
 
Status InsertQueue(ForQueue &Q,QElemType e)		//插入元素e为Q的队尾元素
{
	if(Q.length == MAX_SIZE)	//表明满了
		return ERROR;	 
	Q.base[Q.rear] = e;
	Q.rear = (Q.rear + 1) % MAX_SIZE;
	Q.length++;
	return OK;
}

QElemType DeQueue(ForQueue &Q )					//在队列不为空的情况下,删除队头元素
{
	if(Q.length == 0)return ERROR;
	else 
	{
		QElemType e = Q.base[Q.front];
		Q.front++;	 
		Q.length--;
		return e;
	}	 
	 
}

抱歉!评论已关闭.