循环队列的实现

循环队列的实现:

1>循环队列的初始化创建

2>循环队列的释放

3>循环队列的打印

4>循环队列的判空

5>循环队列的判满

6>求循环队列当前长度

7>循环队列队尾入队

8>循环队列队首出队


#include<iostream>

#define  MAXQUEUE 10

typedef int DataType;
enum Status{OK, ERROR, FAILED};

struct CirQueue 
{
	DataType* base;
	int front;
	int real;
};

// 初始化创建循环队列
int InitCirQueue(CirQueue& que)
{
    que.base = (DataType*) malloc(MAXQUEUE * sizeof(DataType));
	if (NULL == que.base)
	{
		return FAILED;
	}

	que.front = que.real = 0;

	std::cout << "Init CirQueue succeed ~" << std::endl;
	return OK;
}

// 释放循环队列
void DestoryCirQueue(CirQueue& que)
{
	if (que.base != NULL)
	{
		free(que.base);
		que.base = NULL;
	}

	std::cout << "Destory CirQueue succeed ~" << std::endl;
}

// 打印循环队列
void PrintCirQueue(CirQueue& que)
{
	std::cout << "CirQueue elems [";
	int cur = que.front;
	while(cur != que.real)
	{
		std::cout << " " << que.base[cur];
		cur = (cur + 1) % MAXQUEUE;
	}
	std::cout << " ]" << std::endl;
}

// 循环队列判空
int EmptyCirQueue(CirQueue& que)
{
	return que.front == que.real;
}

// 循环队列判满
int FullCirQueue(CirQueue& que)
{
	if ((que.real + 1) % MAXQUEUE == que.front)
	{
		return 1;
	}

	return 0;
}

// 求循环队列长度
int LengthCirQueue(CirQueue& que)
{
	return (que.real - que.front + MAXQUEUE) % MAXQUEUE;
}

// 向循环队列添加元素 队尾入队
int EnCirQueue(CirQueue& que, DataType val)
{
	if (FullCirQueue(que))
	{
		std::cout << "the cirqueue is fulled " << std::endl;
		return ERROR;
	}

	que.base[que.real] = val;
	que.real = (que.real + 1) % MAXQUEUE;

	return OK;
}

// 从循环队列删除元素 队首出队
int DeCirQueue(CirQueue& que, DataType& val)
{
	if (EmptyCirQueue(que))
	{
		std::cout << "the cirqueue is empty" << std::endl;
		return ERROR;
	}

	val  = que.front;
	que.front = (que.front + 1) % MAXQUEUE;
	
	return OK;
}

int main()
{

	CirQueue que;
	if (InitCirQueue(que) != OK)
	{
		std::cout << "Init and create cirqueue failed" << std::endl;
		return 0;
	}
	PrintCirQueue(que);
    
	if (EmptyCirQueue(que))
	{
		std::cout << "cirqueue empty" << std::endl;
	}

	if (FullCirQueue(que))
	{
		std::cout << "cirqueue full" << std::endl;
	}

	std::cout << "CirQueue current length = " << LengthCirQueue(que) << std::endl;

	for (int i = 1; i <= MAXQUEUE; i++)
	{
		if (OK != EnCirQueue(que, i))
		{
			std::cout << "insert elem to cirqueue failed " << std::endl;
			break;
		}
		PrintCirQueue(que);
		std::cout << "CirQueue current length = " << LengthCirQueue(que) << std::endl;
	}

	PrintCirQueue(que);

	if (EmptyCirQueue(que))
	{
		std::cout << "cirqueue empty" << std::endl;
	}

	if (FullCirQueue(que))
	{
		std::cout << "cirqueue full" << std::endl;
	}

	std::cout << "Delete elems" << std::endl;
	DataType val;
	for (int i = 0; i < MAXQUEUE; i++)
	{
		if (OK != DeCirQueue(que, val))
		{
			std::cout << "delete elem from cirqueue failed " << std::endl;
			break;
		}
		PrintCirQueue(que);
		std::cout << "CirQueue current length = " << LengthCirQueue(que) << std::endl;
	}


	DestoryCirQueue(que);
	return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值