【C++】队列实现

在这里插入图片描述

循环队列

在这里插入图片描述
front :指向队首元素的索引
rear:指向队尾元素的下一个索引

入队:
在这里插入图片描述

出队:
在这里插入图片描述

empty:
在这里插入图片描述
判断是否满:
在这里插入图片描述

#include<iostream>
using namespace std;
typedef struct Queue {
    
    
	int* pBase;
	int front;
	int rear;
	int n;
}QUEUE,*PQUEUE;
void init(PQUEUE,int);
bool empty_queue(PQUEUE);
bool full_queue(PQUEUE);
bool en_queue(PQUEUE, int);
bool out_queue(PQUEUE, int*);
void traverse_queue(PQUEUE);
int main() {
    
    
	QUEUE Q;
	init(&Q,6);
	en_queue(&Q, 1);
	en_queue(&Q, 2);
	en_queue(&Q, 3);
	en_queue(&Q, 4);
	en_queue(&Q, 5);
	en_queue(&Q, 6);
	en_queue(&Q, 7);
	traverse_queue(&Q);
	cout << "\n";
	int val;
	while (!empty_queue(&Q)) {
    
    
		if (out_queue(&Q, &val)) {
    
    
			cout << "出队成功,队列出队的元素是:" << val << "\n";
		}
		else {
    
    
			cout << "出队失败!\n";
		}
	}
	if (out_queue(&Q, &val)) {
    
    
		cout << "出队成功,队列出队的元素是:" << val << "\n";
	}
	else {
    
    
		cout << "出队失败!\n";
	}
	return 0;
}

void init(PQUEUE pQ,int n)
{
    
    
	pQ->n = n;
	pQ->pBase = new int[pQ->n];
	pQ->front = pQ->rear = 0;
}

bool empty_queue(PQUEUE pQ)
{
    
    
	if (pQ->front == pQ->rear)
		return true;
	return false;
}

bool full_queue(PQUEUE pQ)
{
    
    
	if ((pQ->rear + 1) % pQ->n == pQ->front) {
    
    
		return true;
}
	return false;

	
}

bool en_queue(PQUEUE pQ, int val)
{
    
    
	if (full_queue(pQ)) {
    
    
		return false;
	}
	else {
    
    
		pQ->pBase[pQ->rear] = val;
		pQ->rear = (pQ->rear + 1) % pQ->n;
	}
}

bool out_queue(PQUEUE pQ, int*pVal)
{
    
    
	if (empty_queue(pQ)) {
    
    
		return false;
	}
	else {
    
    
		*pVal = pQ->pBase[pQ->front];
		pQ->front = (pQ->front + 1) % pQ->n;
		return true;
	}
}

void traverse_queue(PQUEUE pQ)
{
    
    
	int i = pQ->front;
	while (i != pQ->rear) {
    
    
		cout << *(pQ->pBase + i) << " ";
		i = (i + 1) % pQ->n;
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_48180029/article/details/113435133