几种简单的数据结构的C++实现,树,图,链表,环形队列,栈等---环形队列篇
2016-11-26 20:32
1941 查看
//简单实现,模板类,环形队列
#include <iostream>
using namespace std;
template <typename T,int size>
class Queue
{
public:
Queue();
~Queue();
void travel();
bool isFull() const;
bool isEmpty() const;
bool EnQueue(T elem);
bool DeQueue(T &elem);
void clear();
private:
int m_iSize;
int m_iHead;
int m_iTail;
int m_iLength;
T *m_Qqueue;
};
template <typename T,int size>
Queue<T,size>::Queue(){
m_iSize=size;
m_Qqueue=new T[size];
clear();
}
template <typename T,int size>
Queue<T,size>::~Queue(){
delete []m_Qqueue;
m_Qqueue=NULL;
}
template <typename T,int size>
void Queue<T,size>::clear(){
m_iTail=0;
m_iHead=0;
m_iLength=0;
}
template <typename T,int size>
bool Queue<T,size>::isFull() const{
return m_iSize==m_iLength ? true:false;
}
template <typename T,int size>
bool Queue<T,size>::isEmpty() const{
return m_iLength==0 ? true:false;
}
template <typename T,int size>
bool Queue<T,size>::EnQueue(T elem){
if(isFull()){
return false;
}else{
m_Qqueue[m_iTail]=elem;
m_iTail=(m_iTail+1)%m_iSize;
m_iLength++;
return true;
}
}
template <typename T,int size>
bool Queue<T,size>::DeQueue(T &elem){
if(isEmpty()){
return false;
}else{
elem=m_Qqueue[m_iHead];
m_iHead=(m_iHead+1)%m_iSize;
m_iLength--;
return true;
}
}
template <typename T,int size>
void Queue<T,size>::travel(){
int i;
for (i=m_iHead;i<m_iHead+m_iLength;i++){
cout<<m_Qqueue[i%m_iSize]<<" ";
}
cout<<endl;
}
//测试队列
int main()
{
int a,b;
char c,d;
Queue<int,5> q1;
Queue<char,4> q2;
cout<<q1.isEmpty()<<endl;
cout<<q2.isEmpty()<<endl;
q1.EnQueue(6);
q1.EnQueue(7);
q1.EnQueue(8);
q1.EnQueue(9);
q1.EnQueue(10);
q2.EnQueue('c');
q2.EnQueue('w');
q2.EnQueue('q');
q2.EnQueue('z');
cout<<q1.isFull()<<endl;
cout<<q2.isFull()<<endl;
q1.travel();
q2.travel();
q1.DeQueue(a);
q1.DeQueue(b);
cout<<a<<" "<<b<<endl;
q1.travel();
q2.DeQueue(c);
q2.DeQueue(d);
cout<<c<<" "<<d<<endl;
q2.travel();
q1.EnQueue(11);
q2.EnQueue('y');
q1.travel();
q2.travel();
return 0;
}
//打印结果
1
1
1
1
6 7 8 9 10
c w q z
6 7
8 9 10
c w
q z
8 9 10 11
q z y
#include <iostream>
using namespace std;
template <typename T,int size>
class Queue
{
public:
Queue();
~Queue();
void travel();
bool isFull() const;
bool isEmpty() const;
bool EnQueue(T elem);
bool DeQueue(T &elem);
void clear();
private:
int m_iSize;
int m_iHead;
int m_iTail;
int m_iLength;
T *m_Qqueue;
};
template <typename T,int size>
Queue<T,size>::Queue(){
m_iSize=size;
m_Qqueue=new T[size];
clear();
}
template <typename T,int size>
Queue<T,size>::~Queue(){
delete []m_Qqueue;
m_Qqueue=NULL;
}
template <typename T,int size>
void Queue<T,size>::clear(){
m_iTail=0;
m_iHead=0;
m_iLength=0;
}
template <typename T,int size>
bool Queue<T,size>::isFull() const{
return m_iSize==m_iLength ? true:false;
}
template <typename T,int size>
bool Queue<T,size>::isEmpty() const{
return m_iLength==0 ? true:false;
}
template <typename T,int size>
bool Queue<T,size>::EnQueue(T elem){
if(isFull()){
return false;
}else{
m_Qqueue[m_iTail]=elem;
m_iTail=(m_iTail+1)%m_iSize;
m_iLength++;
return true;
}
}
template <typename T,int size>
bool Queue<T,size>::DeQueue(T &elem){
if(isEmpty()){
return false;
}else{
elem=m_Qqueue[m_iHead];
m_iHead=(m_iHead+1)%m_iSize;
m_iLength--;
return true;
}
}
template <typename T,int size>
void Queue<T,size>::travel(){
int i;
for (i=m_iHead;i<m_iHead+m_iLength;i++){
cout<<m_Qqueue[i%m_iSize]<<" ";
}
cout<<endl;
}
//测试队列
int main()
{
int a,b;
char c,d;
Queue<int,5> q1;
Queue<char,4> q2;
cout<<q1.isEmpty()<<endl;
cout<<q2.isEmpty()<<endl;
q1.EnQueue(6);
q1.EnQueue(7);
q1.EnQueue(8);
q1.EnQueue(9);
q1.EnQueue(10);
q2.EnQueue('c');
q2.EnQueue('w');
q2.EnQueue('q');
q2.EnQueue('z');
cout<<q1.isFull()<<endl;
cout<<q2.isFull()<<endl;
q1.travel();
q2.travel();
q1.DeQueue(a);
q1.DeQueue(b);
cout<<a<<" "<<b<<endl;
q1.travel();
q2.DeQueue(c);
q2.DeQueue(d);
cout<<c<<" "<<d<<endl;
q2.travel();
q1.EnQueue(11);
q2.EnQueue('y');
q1.travel();
q2.travel();
return 0;
}
//打印结果
1
1
1
1
6 7 8 9 10
c w q z
6 7
8 9 10
c w
q z
8 9 10 11
q z y
相关文章推荐
- 几种简单的数据结构的C++实现,树,图,链表,环形队列,栈等---栈篇
- 几种基本数据结构--栈、队列、双向链表、有根树的分析和简单实现
- 基于链表及环形队列的生产者与消费者简单实现
- 简单数据结构之循环链表(C++实现)
- 简单数据结构之双向链表(C++实现)
- 算法与数据结构基础6:C++队列的简单实现
- C++数据结构环形队列Deque实现
- 数据结构_队列_用链表动态建立释放节点实现队列各种操作_C++实现
- 数据结构学习中的简单问题(一):用链表方式实现的队列输出杨辉三角
- 简单数据结构之队列(C++模板库实现)
- 用链表实现队列数据结构
- C++ 带有头结点的单链表的简单实现
- 算法与数据结构课程中的c++实现的顺序表和链表
- 数据结构--单链表实现队列1
- 简单数据结构的实现之循环队列
- 数据结构_链表_多项式求导_C++实现
- 简单链式队列(C++模版技术实现)
- C++ 实现queue(队列)链表
- 数据结构_链表_稀疏多项式求值_C++实现
- java数据结构之LinkedQueue(用链表实现的双端单向队列)