您的位置:首页 > 编程语言 > C语言/C++

用队列实现自动排号机(C++实现)

2017-05-10 21:34 344 查看
队列(FIFO)是一种简单的数据结构。下面的代码采用了环形队列实现自动排号机的程序。自动排号机在银行、电信营业厅都很常见。队列很好的模拟了这一过程



//file name:MyQueue.h

#ifndef MYQUEUE_H

#define MYQUEUE_H

#include<cstddef>

/**************************************************************************************************************/

/*                      环形队列 实现  戚凡 2017-5-10                                                         */

/**************************************************************************************************************/

#include"Customer.h" 

class MyQueue

{

public:
MyQueue(int queueCapacity);
virtual ~MyQueue();
void ClearQueue();
bool QueueEmpty()const;
bool QueueFull()const; 
int QueueLength()const;
bool EnQueue(Customer element);
bool DeQueue(Customer &element);
void QueueTraverse(); 

private:
Customer *m_pQueue;
int m_iQueueLen;
int m_iQueueCapacity;
int m_iHead;
int m_iTail;

};

#endif

//MyQueue.cpp

#include"MyQueue.h"

#include<iostream>

MyQueue::MyQueue(int queueCapacity)

{
m_iQueueCapacity = queueCapacity;
m_pQueue = new Customer[m_iQueueCapacity];

// m_iHead = 0;

// m_iTail = 0;

// m_iQueueLen = 0;
ClearQueue();

}

MyQueue::~MyQueue()

{
delete []m_pQueue;
m_pQueue = NULL;

}

void MyQueue::ClearQueue()

{
m_iHead = 0;
m_iTail = 0;
m_iQueueLen = 0;

}

bool MyQueue::QueueEmpty()const

{
if(m_iQueueLen == 0)
{
return true;
}
else
{
return false;
}

//return m_iQueueLen == 0?true:false;



bool MyQueue::QueueFull()const

{
if(m_iQueueLen == m_iQueueCapacity)
{
return true;
}
else
{
return false;
}



int MyQueue::QueueLength()const

{
return m_iQueueLen;

}

bool MyQueue::EnQueue(Customer element) //实现队列入队 

{
if(QueueFull())
{
return false;
}
else
{
m_pQueue[m_iTail] = element;
m_iTail++;
m_iTail = m_iTail % m_iQueueCapacity;
m_iQueueLen++;
}

}

bool MyQueue::DeQueue(Customer &element)  //实现队列出队 

{
if(QueueEmpty())
{
return false;
}
else
{
element = m_pQueue[m_iHead];
m_iHead++;
m_iHead = m_iHead % m_iQueueCapacity;
m_iQueueLen--;
return true;


}

void MyQueue::QueueTraverse()

{
using namespace std;
for(int i = m_iHead; i < m_iQueueLen + m_iHead ;i++)
{
m_pQueue[i%m_iQueueCapacity].printInfo();
cout<<"前面还有"<<i-m_iHead<<"个人"<<endl; 
}
cout<<endl;

}

//Customer.h

#ifndef CUSTOMER_H

#define CUSTOMER_H

#include<string>

using namespace std;

class Customer

{

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

private:
string m_strName;
int m_iAge;

};

#endif

//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;

}

//demo.cpp

#include<iostream>

using namespace std;

#include<stdlib.h>

#include"MyQueue.h"

/***************************************************************************************************/

/*                               实现环形队列                                                      */

/***************************************************************************************************/

int main(void)

{

// MyQueue *p = new MyQueue(4);

// p->EnQueue(20);

// p->EnQueue(15);

// p->EnQueue(30);

// p->QueueTraverse();

// cout<<endl;

//

// int e = 0;

// p->DeQueue(e);

// p->QueueTraverse();

// cout<<endl; 

//

// delete p;

// p = NULL;

MyQueue *p = new MyQueue(4);
Customer c1("zhangsan",20) ;
Customer c2("lisi",25) ;
Customer c3("wangwu",30) ;

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

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

p->QueueTraverse(); 

ad08
 
system("pause");
return 0;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: