用队列实现自动排号机(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;
}
//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;
}
相关文章推荐
- 用C++实现的带队列,并且当队列为空及任务数大于最大队列长度时自动wait的线程池 ( by quqi99 )
- 队列(c++ 数组实现)
- C++ 大根堆 实现优先队列
- C++ 学习练手 - 数组型队列的模板实现
- c++版队列实现
- c++ 队列基本操作实现
- C++实现循环队列
- C#实现C/C++程序的自动批改
- C++无锁队列实现 (2012-05-15 07:46:26)
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 两个栈来实现一个队列的C++代码
- 数据结构基础——循环队列的C++实现
- c++实现基本循环队列操作
- 利用 C++ 单向链表实现队列
- C++实现栈和队列
- 【算法和数据结构】线性表(四)用两个栈来实现队列(C++实现)
- 队列链式存储结构的C++模板类头文件源代码实现
- C++实现简单的内存块自动管理
- C++实现优先队列——最小堆,d路堆及配对堆
- C++ : 应用 RAII 技术在 Windows 下实现自动释放锁