C++之队列的实现及各种

一、学习要点:
1.队列的特点:
a.先进先出
b.插入只能从队尾插入
c.删除只能从对头删除
d.双向操作
2.队头指针与队尾指针的区别,队头指针指向实际队首,还是队首空位,以及队尾指针是指向实际队尾,还是实际队尾的下一个空位都是事先约定的,之所以这样,是因为如果队首和队尾都指向实际指针时,当队列为空和队列为1个元素时,队首指针和队尾指针完全一样,故其中必有一个指向实际队尾的后一位。
3.队列为满时,队列的最后一位必为空,而且不存放元素
4.队列和栈一样是一种线性结构,其底层基础都是线性数组和链表,基于数组队列的缺点是由于一端插入一端删除,当不断从头部删除数据,头部会大量留有空闲内存,无法插入,造成空间流失,如果将队头指针在每次删除之后往前移动一个位置,这是一个时间复杂度为O(n)的操作.为解决这个要么空间浪费要么时间浪费的问题,使用循环队列,所谓循环队列,是将一个数组看出首尾相连的圆环,删除元素时将队首标志往后移动,添加元素时若数组尾部已经没有空间,则考虑数组头部的空间是否空闲,如果是,则在数组头部插入。
二、代码:
demo092003.cpp

#include<iostream>
#include<stdlib.h>
using namespace std;
template<class T>
class Loopqueque{
public:
Loopqueque(int c);
~Loopqueque();
bool isEmpty();
bool isFull();
int size();
bool push(T t);
bool pop();
T front();//队首指向的元素
private:
int begin;//队首指针
int end;//队尾指针
T *queque;//队列底层数组
int capacity;//队列容量
}
template<class T>
Loopqueque<T>::Loopqueque(int c):begin(0),end(0),capacity(c){
	queque=new T[capacity];
}
template<class T>
Loopqueque<T>::~Loopqueque(){
	delete []queque;
}
template<class T>
bool Loopqueque<T>::isEmpty(){
	if(begin==end){
		return true;
	}else{
		return false;
	}
}
template<class T>
bool Loopqueque<T>::isFull(){
	if(((end+1)%capacity)==begin){
		return true;
	}else{
		return false;
	}
}
template<class T>
int Loopqueque<T>::size(){
	return((end-begin+capacity)%capacity);
}
template<class T>
bool Loopqueque<T>::push(T t){
	if((end+1)%capacity==begin){
		return false;
	}else{
		queque[end]=t;
		end=(end+1)%capacity;
		return true;
	}
}
template<class T>
bool Loopqueque<T>::pop(){
	if(first==end){
		return false;
	}else{
		begin=(begin+1)%capacity;
		return true;
	}
}
template<class T>
T Loopqueque<T>::front(){
	if(begin==end){
	return false;
	}else{
	return queque[begin];
	}
}

调用代码:

#include<iostream>
#include<stdlib.h>
#include<string>
#include"demo092303.cpp";
using namespace std;
int main(){
	Loopqueque<string> queque(6);
	queque.push("one");
	queque.push("two");
	queque.push("three");
	queque.push("four");
	queque.push("five");
	cout<<"队列长度:"<<queque.size()<<endl;
	cout<<queque.isFull()<<endl;
	while(!queque.isEmpty()){
		queque.pop;
	}
	cout<<queque.isEmpty()<<endl;
	system("pause");
	return 0;
}

三、运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值