mooc—james_yuan课程代码
#pragma once
#include
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;
};
#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;
}
#include
#include
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类
#pragma once
#include
using namespace std;
#include
class Customer
{
public:
Customer(string name = " ", int age = 0);
void printInfo() const;
private:
string m_strName;
int m_iAge;
};
#include
#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;
}
#include "Customer.h"
bool EnQueue(Customer element); //EnQueue(&Q, element) 新元素入队
bool DeQueue(Customer &element); //DeQueue(&Q, &element) 首元素出队
Customer *m_pQueue; //队列数组指针
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;
}
//实现环形队列
#include
#include
#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;
}