Queue的顺序实现


1)首先我们还是看一下STL关于queue的使用方法

#include"stdafx.h"

#include<iostream>

#include<queue>

#include<algorithm>

usingnamespacestd;



int_tmain(intargc,_TCHAR*argv[])

{


deque<int>iQue(20,0); //定义了个元素初值为

cout<<"size= "<<iQue.size()<<endl;


for(inti=0;i<20;i++)

iQue[i]= i+1; //重载了[]


for(inti=0;i<20;i++)

cout<<iQue.at(i)<<" "; //获取i位置的元素

cout<<endl;


for(inti=0;i<3;i++)

iQue.push_back(i+90); //在后面添加数据


for(inti=0;i<iQue.size();i++) //进行输出

cout<<iQue[i]<<"";

cout<<endl;


for(inti=0;i<5;i++)

iQue.pop_back(); //进行数据的弹出


for(inti=0;i<iQue.size();i++)

cout<<iQue[i]<<"";

cout<<endl;


iQue.push_front(1000); //在队列的首部添加数据


deque<int>::iteratorit;

for(it=iQue.begin();it!=iQue.end();++it) //使用泛型指针进行迭代

cout<<*it<<"";

cout<<endl;


getchar();

return0;

}




2)看看queue的源码,的确实现的难度比较大(泛型指针包括四个域,使用了map等方法),呵呵,我们简单的写我们自己的queue,也实现一些基本功能。

#include"stdafx.h"

#include<iostream>

usingnamespacestd;

template<classT>

classQueue

{

public:

conststaticsize_tmaxQueueSize= 40; //定义最大的容量

typedefT*iterator; //不适用泛型了

typedefT&ref_iterator;

typedefconstT*const_iterator;

typedefconstT&const_ref_iterator;


private:

intfront,rear; //定义头指针和尾指针

intmaxSize;

T*arr;

public:

Queue(size_tsize):front(0),rear(0)

{

maxSize= size>maxQueueSize?maxQueueSize:size;

arr= newT[maxSize];

}

Queue():maxSize(maxQueueSize),front(0),rear(0){};

~Queue(){if(arr) delete[]arr;};


boolIsEmpty()const{return(front==rear);};

boolIsFull()const{return((rear+1)%maxSize== front);}; //使用循环队列


voidsetEmpty(){front=rear=0;}; //进行指针的重定向


const_ref_iteratorgetFont()const

{

if(IsEmpty())

returnNULL;

returnarr[front];

}

const_ref_iteratorgetRear()const

{

if(IsEmpty())

throwout_of_range("范围错误!");

returnarr[rear];

}


voidpush_back(constT&val)

{

if(IsFull())

extendQueue(2*maxSize);

arr[rear]= val;

rear++;

}


voidpop_back()

{

if(front+1== maxSize)front=0;

}


iteratorbegin()

{

return&arr[front];

}

iteratorend()

{

return&arr[rear];

}


voidextendQueue(size_tnewSize)

{

T*oldArr= arr;

arr= newT[newSize];

inti=0;

for(; i<maxSize;i++)arr[i]= oldArr[i];

front=0;

rear= i;

maxSize= newSize;

delete[]oldArr;

}

constQueue&operator=(constQueue&src);


size_tsize()

{

return(rear-front);

}

};



template<classT>

constQueue<T>&Queue<T>::operator=(constQueue&src)

{

if(this==&src) return*this;

delete[]arr;

maxSize= src.maxSize;

arr= newT[maxSize];

for(size_ti=0;i<maxSize;i++) arr[i]= src.arr[i];

front= 0;

rear= i;

return*this;

}


int_tmain(intargc,_TCHAR*argv[])//进行简单测试

{

Queue<int>iQue(10);

iQue.push_back(3);

iQue.push_back(4);

iQue.push_back(5);

iQue.push_back(6);

iQue.push_back(7);

iQue.push_back(8);


intval= iQue.getFont();

cout<<val<<endl;



for(Queue<int>::iteratorit=iQue.begin();it!=iQue.end();it++) //由于使用底层普通指针可以使用++

cout<<*it<<" ";

cout<<endl;


getchar();

return0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值