C++实现循环队列

/*
 * SqQueue.h
 *
 *  Created on: Oct 7, 2015
 *      Author: chris
 */

#ifndef SQQUEUE_H_
#define SQQUEUE_H_

typedef int ElemType;

enum{SQQUEUEINITSIZE = 30};

struct SqQueue{
	ElemType * data;
	int front, rear;
	int size;
};

bool SqQueueCreate(SqQueue& sq);
void SqQueueDestroy(SqQueue& sq);

void SqQueueClear(SqQueue& sq);
int  SqQueueLength(SqQueue& sq);
bool SqQueueEmpty(SqQueue& sq);
int  SqQueueSize(SqQueue& sq);

bool SqQueueEnQueue(SqQueue& sq, ElemType e);
bool SqQueueFront(SqQueue& sq, ElemType& e);
bool SqQueueDeQueue(SqQueue& sq);

void SqQueueDisplay(SqQueue& sq);

#endif /* SQQUEUE_H_ */




/*
 * SqQueue.cpp
 *
 *  Created on: Oct 7, 2015
 *      Author: chris
 */

#include"SqQueue.h"
#include<iostream>

using namespace std;


bool SqQueueCreate(SqQueue& sq)
{
	sq.data = new ElemType[SQQUEUEINITSIZE];
	if(!sq.data) return false;

	sq.size = SQQUEUEINITSIZE;
	sq.front = sq.rear = 0;
	return true;
}

void SqQueueDestroy(SqQueue& sq)
{
	delete sq.data;
	sq.size = 0;
	sq.front = sq.rear = 0;
}

void SqQueueClear(SqQueue& sq)
{
	sq.front = sq.rear = 0;
}

int  SqQueueLength(SqQueue& sq)
{
	return (sq.size+sq.rear-sq.front)%sq.size;
}

bool SqQueueEmpty(SqQueue& sq)
{
	return sq.front == sq.rear;
}

int  SqQueueSize(SqQueue& sq)
{
	return sq.size;
}

bool SqQueueEnQueue(SqQueue& sq, ElemType e)
{
	if((sq.rear + 1)%sq.size ==sq.front) return false;

	sq.data[sq.rear] = e;
	sq.rear = (sq.rear+1)%sq.size;
	return true;
}

bool SqQueueFront(SqQueue& sq, ElemType& e)
{
	if(sq.front == sq.rear) return false;

	e = sq.data[sq.front];
	return true;
}

bool SqQueueDeQueue(SqQueue& sq)
{
	if(sq.front == sq.rear) return false;

	sq.rear = (sq.size+sq.rear-1)%sq.size;
	return true;
}


void SqQueueDisplay(SqQueue& sq)
{
	for(int i = sq.front; i < sq.rear; i = (i+1)%sq.size)
		cout << sq.data[i] << " ";
	cout << endl;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值