C++数据结构___队列

队列

mooc—james_yuan课程代码

C++实现环形队列

MyQueue.h

#pragma once
#include<iostream>
using namespace std;

class MyQueue
{
public:
	MyQueue(int queueCapactity);    //创建队列
	virtual ~MyQueue();             //销毁队列
	void ClearQueue();              //清空队列
	bool QueueEmety() const;        //)判空队列
	bool QueueFull() const;         //判断为满
	int QueueLength() const;        //队列长度
	bool EnQueue(int element);      //新元素入队
	bool DeQueue(int &element);      //新元素出队
	void QueueTraverse();            //遍历队列

private:
	int* m_pQueue;//队列数组指针
	int m_iQueueLen;//队列元素个数
	int m_iQueueCapacity;//队列数组容量
	int m_iHead;
	int m_iTail;
};

MyQueue.cpp

#include"MyQueue.h"

//创建环形队列
MyQueue::MyQueue(int queueCapactity)
{
	m_iQueueCapacity = queueCapactity;//将队列的容积赋值给内部的变量,知道队列的总容量
	m_iHead = 0;
	m_iTail = 0;
	m_iQueueLen = 0;
	m_pQueue = new int[m_iQueueCapacity];
}

//销毁环形队列
MyQueue::~MyQueue()
{
	delete[] m_pQueue;
	m_pQueue = NULL;
}

//清空队列
void MyQueue::ClearQueue()
{
	m_iHead = 0;
	m_iTail = 0;
	m_iQueueLen = 0;
}

//判空队列
bool MyQueue::QueueEmety() const
{
	if (m_iQueueLen == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
	//return m_iQueueLen == 0 ? true : false;//三目运算符判空
}


//QueueLength(Q)队列长度
int MyQueue::QueueLength() const
{
	return m_iQueueLen;
}


//判断队列满
bool MyQueue::QueueFull() const
{
	if (m_iQueueLen == m_iQueueCapacity)
	{
		return true;
	}
	return false;
}


//环形队列插入元素
bool MyQueue::EnQueue(int element)
{
	if (QueueFull())
	{
		return false;
	}
	else
	{
		m_pQueue[m_iTail] = element;
		m_iTail++;
		m_iQueueLen++;
		return true;
	}
}


//出队
bool MyQueue::DeQueue(int& element)
{
	if (QueueEmety())
	{
		return false;
	}
	else
	{
		element = m_pQueue[m_iHead];
		m_iHead++;
		m_iHead = m_iHead % m_iQueueCapacity;
		m_iQueueLen--;
		return true;
	}
}


//遍历
void MyQueue::QueueTraverse()
{
	cout << endl;
	for (int i = m_iHead; i < m_iQueueLen + m_iHead; i++)
	{
		cout << m_pQueue[i % m_iQueueCapacity] << endl;
	}
	cout << endl;
}

demo.cpp

#include<iostream>
#include<algorithm>
using namespace std;
#include"MyQueue.h"

//实现环形队列

int main(void)
{
	MyQueue* p = new MyQueue(4);

	p->EnQueue(10);
	p->EnQueue(12);
	p->EnQueue(13);
	p->EnQueue(14);
	p->EnQueue(18);//判断队列是否满
	p->QueueTraverse();

	int e = 0;
	p->DeQueue(e);
	cout << endl;
	cout << e << endl;

	p->DeQueue(e);
	cout << endl;
	cout << e << endl;

	cout << endl;
	p->QueueTraverse();

	p->ClearQueue();
	p->QueueTraverse();

	p->EnQueue(15);
	p->EnQueue(16);

	delete p;
	p = NULL;	

	system("pause");
	return 0;
}

运行结果

在这里插入图片描述

对象成员较复杂:比如为Custeomer类

Customer.h

#pragma once
#include<iostream>
using namespace std;
#include<string>

class Customer
{
public:
	Customer(string name = " ", int age = 0);
	void printInfo() const;

private:
	string m_strName;
	int m_iAge;
};

Customer.cpp

#include<iostream>
#include "Customer.h"
using namespace std;

Customer::Customer(string name, int age)
{
	m_strName = name;
	m_iAge = age;
}

void Customer::printInfo() const
{
	cout << "姓名:" << m_strName << endl;
	cout << "年龄:" << m_iAge << endl;
	cout << endl;
}

MyQueue.h修改

#include "Customer.h"
	bool EnQueue(Customer element);	//EnQueue(&Q, element) 新元素入队
	bool DeQueue(Customer &element);	//DeQueue(&Q, &element)	首元素出队
	Customer *m_pQueue;	//队列数组指针

MyQueue.cpp修改

bool MyQueue::EnQueue(Customer element)
bool MyQueue::DeQueue(Customer &element)

MyQueue::MyQueue(int queueCapacity)
{
	m_iQueueCapacity = queueCapacity;
	m_pQueue = new Customer[m_iQueueCapacity];
	ClearQueue();
}

void MyQueue::QueueTraverse()
{
	cout << endl;
	for (int i = m_iHead; i < m_iQueueLen + m_iHead; i++)
	{
		m_pQueue[i%m_iQueueCapacity].printInfo();
		cout << "前面还有" << (i - m_iHead) << "人" << endl;
	}
	cout << endl;
}

demo.cpp

//实现环形队列

#include <iostream>
#include <stdlib.h>
#include "MyQueue.h"
#include "Customer.h"
using namespace std;

int main(void)
{
	MyQueue *p = new MyQueue(4);
	Customer c1("zhangsan", 20);
	Customer c2("lisi", 30);
	Customer c3("wangwu", 10);

	p->EnQueue(c1);
	p->EnQueue(c2);
	p->EnQueue(c3);

	p->QueueTraverse();

	Customer c4("", 0);
	p->DeQueue(c4);
	c4.printInfo();

	p->QueueTraverse();

	delete p;
	p = NULL;

	system("pause");
	return 0;
}

运行结果

在这里插入图片描述
课程连接:
数据结构探险—队列篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值