实现循环队列的各种基本运算

实现循环队列的各种基本运算

循环功能的实现

参考书籍:63页 数据结构(C语言版). 严蔚敏等, 清华大学出版社, 2019.

功能函数

struct Sque{
	int *base;
	int front, rear;
};
bool init(Sque &Q); //初始化循环队列
bool push(Sque &Q, int e); 
bool pop(Sque &Q, int &e);
bool isempty(Sque &Q);
bool clear(Sque &Q);
void initRandomize(int *arr, int n, int min, int max); //随机数生成函数

代码实现

#include<bits/stdc++.h>
using namespace std;
const int que_size=100;
struct Sque{
	int *base;
	int front, rear;
};
bool init(Sque &Q)
{
	Q.base=(int*)malloc(que_size*sizeof(int));
	if(Q.base==NULL)
		return false;
	Q.front=Q.rear=0;
	return true;
}
bool push(Sque &Q, int e)
{
	if( (Q.rear+1)%que_size == Q.front) return false;
	Q.base[Q.rear]=e;
	Q.rear=(Q.rear+1)%que_size;
	return true;	
}
bool pop(Sque &Q, int &e)
{
	if(Q.front==Q.rear)
		return false;
	e=Q.base[Q.front];
	Q.front=(Q.front+1)%que_size;
	return true;
}
bool isempty(Sque &Q)
{
	if(Q.rear==Q.front)
		return true;
	else return false; 
}
bool clear(Sque &Q)
{
	if(Q.base!=NULL)
		free(Q.base);
	Q.base=NULL;
	Q.front=Q.rear=0;
	return true;
}
/*
	产生n个[min, max]的随机数。可能会有重复值。
*/
void initRandomize(int *arr, int n, int min, int max)
{
    int i = 0;
    srand(time(0));  			/*设置种子,并生成伪随机序列*/
    for (i = 0; i < n; ++i) {
        arr[i] = rand() % (max - min + 1) + min;  /*得到从[min, max]之间的随机数*/
        printf("%d ", arr[i]);
    }
    printf("\n\n");
}
int main()
{
	int num[100];
	Sque Q;
	if(init(Q))
		cout<<"循环队列初始化成功\n";
	else 
		cout<<"循环队列初始化失败\n";
	cout<<"随机数如下:\n";
	initRandomize(num, 10, 0, 100);
	for(int i=0; i<10; i++)
	{
		if( !push(Q, num[i]) )
		{
			cout<<"push出现问题,push操作停止\n";
			break;
		}
	} 
	int e;
	cout<<"下面将循环队列里面的内容全部出栈\n";
	while(!isempty(Q))
	{
		if(!pop(Q, e))
		{
			cout<<"pop出现问题,pop操作停止\n";
			break;
		}
		cout<<e<<" ";
	} 
	cout<<endl<<endl;
	if(clear(Q))
		cout<<"释放循环队列成功\n";
	else 
		cout<<"释放循环队列失败\n";
	return 0;
}
posted @ 2019-11-19 09:25  ALKING1001  阅读(970)  评论(0编辑  收藏  举报