自己写的一个简陋的C++队列模板

原创 2005年05月23日 00:14:00

说明:

1.这个队列模板逻辑上以循环队列,物理上以元素数组为基础封装

2.队列只能在头出元素,在尾进元素;当头等于尾时认为队列空,当头的下一位置为尾时认为队列满

//--------------------------文件名:queue.h-----------------

#ifndef SUNXYQUEUE_H
#define SUNXYQUEUE_H
const int QDEFAULT=65500;
template<class T>
class SunxyQueue
{
 public:
 SunxyQueue(int s);
  virtual  ~SunxyQueue();
 T Front();
 T Back();
 bool In(T entry);
 T Out();
 int ElemNum();
 bool isEmpty();
 bool isFull();
 virtual void Display();


 private:
 int head,end,size;
 T* array;
};


template<class T>
SunxyQueue<T>::SunxyQueue(int s=QDEFAULT)
{
 head=end=0;
 if(s<=QDEFAULT&&s>0)
  size=s+1;
 else
  size=QDEFAULT+1;
 array=new T[size];
}
template<class T>
SunxyQueue<T>::~SunxyQueue()
{
 head=end=0;size=0;
 delete[] array;
}
template<class T>
T SunxyQueue<T>::Front()
{
 T p;
 if(!this->isEmpty())
  p=array[end];
 return p;
}
template<class T>
T SunxyQueue<T>::Back()
{
 T p;
 if(!this->isEmpty())
  p=(head==0)?array[size-1]:array[head-1];
 return p;
}
template<class T>
bool SunxyQueue<T>::In(T entry)
{
 bool sign;
 if(!this->isFull())
 {
  array[head]=entry;
  head++;
  head=(head<size)?head:(head-size);
  sign=true;
 }
 else
  sign=false;
 return sign;

}
template<class T>
T SunxyQueue<T>::Out()
{
 T p;
 if(!this->isEmpty())
 { 
  p=array[end];
  end++;
  end=(end<size)?end:(end-size);
 }
 return p;
}
template<class T>
int SunxyQueue<T>::ElemNum()
{
 int s;
 if(!this->isEmpty())
 {
  if(this->isFull())
   s=size-1;
  else
   s=(head>end)?(head-end):(size-end+head);
 }
 else
  s=0;
 return s;
}
template<class T>
bool SunxyQueue<T>::isEmpty()
{
 if(head==end)
  return true;
 else
  return false;
}
template<class T>
bool SunxyQueue<T>::isFull()
{
 if((((head+1)<size)?(head+1):(head+1-size))==end)
  return true;
 else
  return false;
}
template<class T>
void SunxyQueue<T>::Display()
{
 //add codes here
 //
}

#endif

//--------------------------queue.h结束---------------------

演示程序:

    N个人站成一圈,从一个人开始(令这个人编号为1,顺时针依次将每个人编号)顺时针依次数数,数到M的人出圈,求最后留下的人编号是什么?(如当N=10,M=3时,结果为4)

//---------------------文件名:queuetest.cpp-----------------

#include <iostream>
#include "queue.h"
#include <stdio.h>
#include <time.h>

using namespace std;
//经测试,N=65000,M=365时,运行时间约为4秒

int main(int argc,char* argv[])
{
 int m=0,n=0;
 while(n<=0)
 {
  cout<<"Please input the N:";
  cin>>n;
 }
 while(m<=0)
 {
  cout<<"Please input the M:";
  cin>>m;
 }
 time_t tstart,tend;
 tstart=time(NULL);
 Queue<int> ring(n);
 int i=1;
 while(!ring.isFull())
  ring.In(i++);
 i=1;
 while(ring.ElemNum()>1)
 {
  while(i<m)
  {
   ring.In(ring.Out());
   i++;
  }
  ring.Out(); 
  i=1;
 }
 cout<<"The last people is:"<<ring.Back()<<endl;
 tend=time(NULL);
 //显示运行时间
 cout<<endl<<"Elapsed time "<<difftime(tend,tstart)<<" seconds."<<endl;
 system("pause");
}


//----------------------queuetest.cpp结束-------------------

C++ 模板应用 实现一个Queue 队列

#include using namespace std; template class Queue { public: Queue() { Node *node=new Node(); ...
  • cq361106306
  • cq361106306
  • 2014年09月28日 13:24
  • 4762

C++利用模板实现一个队列

开头总结:.利用模板类实现了一个队列,利用模板的好处是提供泛型编程,在存储数据的时候会适应不同类型的数据,减少了代码的书写,简化了程序的结构。#include using namespace std...
  • bao2516090
  • bao2516090
  • 2015年09月19日 19:40
  • 1898

自己写的一个简陋的C++栈模板

说明:1.这个栈模板基于元素数组2.未对代码作仔细的测试#ifndef SUNXYSTACK_H#define SUNXYSTACK_H#define SMAX 200templateclass St...
  • sunxysong
  • sunxysong
  • 2005年05月23日 00:27
  • 1203

队列(顺序存储)C++模板实现

队列:一端进行插入,另一端进行删除的sh
  • iamgaowei
  • iamgaowei
  • 2014年04月09日 16:57
  • 1471

<C/C++数据结构>队列(C++模板实现)

一,队列的基本概念 队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。...
  • EbowTang
  • EbowTang
  • 2015年02月01日 23:21
  • 1333

STL编程题2(C++程序设计第9周)

描述写一个自己的 CMyistream_iterator 模板,使之能和 istream_iterator 模板达到一样的效果,即:输入:79 90 20 hello me输出:7979,90,20h...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2016年01月16日 00:06
  • 1595

【C++ STL模板之queue队列的用法】

--Queue用法   2010-08-17 21:13:06|  分类: STL--标准模板库|举报|字号 订阅 #include #include #i...
  • u010800530
  • u010800530
  • 2014年04月28日 22:51
  • 5341

C++模板实现的队列多线程安全

直接给代码,没什么好说的。#pragma once #include #include #include #include #include template class Threadsa...
  • KellyGod
  • KellyGod
  • 2017年04月12日 22:26
  • 517

自己写一个strcmp函数(C++)

题目说明: 写一个函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为int strcmp( char * p1, char * p2); 设p1指向字符串s1,p2指向字符串s2...
  • QianShouYuZhiBo
  • QianShouYuZhiBo
  • 2013年08月09日 21:31
  • 2666

C++模板实现队列

我准备练习一下模板的知识,然后自己实现vector类。在这之前,先用模板实现一个队列来热身吧。队列的底层是链表。主要是熟悉一下模板的写法。 另外,就是模板的定义和实现都要写在一个文件中(export...
  • randyjiawenjie
  • randyjiawenjie
  • 2011年08月28日 20:02
  • 4403
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己写的一个简陋的C++队列模板
举报原因:
原因补充:

(最多只允许输入30个字)