zoukankan      html  css  js  c++  java
  • 用首位相接的数组仿stl双端队列deque

    这是stl deque的测试 仅实现部分功能
    在这里插入图片描述
    这是利用首位相接的数组 [循环队列]仿stl双端队列deque
    在这里插入图片描述
    将得到一样的结果
    在这里插入图片描述

    #include<iostream>
    #include<unordered_map>
    using namespace std;
    template<class T>
    class Deque
    {
    	int start, rear;
    	T* elements;
    	int maxsize ;
    public:
    	Deque();
    	~Deque() { delete[]elements; }
    	bool empty();
    	bool isfull();
    	void clear();
    	int front();
    	int back();
    	void push_back(int x);
    	void push_front(int x);
    	void pop_back();
    	void pop_front();
    	int at(int x);
    	T operator[](int x);
    };
    template<class T>
    Deque<T>::Deque()
    {
    	maxsize = 100;
    	elements = new T[maxsize];
    	start = rear = 0;
    }
    template<class T>
    bool Deque<T>::empty()
    {
    	if (start == rear)
    		return true;
    	return false;
    }
    template<class T>
    bool Deque<T>::isfull()
    {
    	if ((rear+1)%maxsize== start)
    		return true;
    	return false;
    }
    template<class T>
    void Deque<T>::clear()
    {
    	start = rear = 0;
    }
    template<class T>
    int Deque<T>::front()
    {
    	if (!empty())
    		return elements[start];
    	else
    		cout << "队列为空" << endl;
    }
    template<class T>
    int Deque<T>::back()
    {
    	if (!empty())
    	{
    		int temp = (rear - 1 + maxsize) % maxsize;
    		return elements[temp];
    	}
    	else
    		cout << "队列为空" << endl;
    }
    template<class T>
    void Deque<T>::push_back(int x)
    {
    	if (!isfull())
    	{
    		elements[rear] = x;
    		rear=(rear+1+maxsize)%maxsize;
    	}
    	else
    		cout << "队列已满,不能从尾部插入" << endl;
    }
    template<class T>
    void Deque<T>::push_front(int x)
    {
    	if (isfull())
    		cout << "队列已满,不能从头部插入" << endl;
    	else {
    		start = (start - 1 + maxsize) % maxsize;
    		elements[start] = x;
    	}
    
    }
    template<class T>
    void Deque<T>::pop_back()
    {
    	if (empty())
    		cout << "队列为空,不能删除" << endl;
    	else
    	{
    		rear = (rear - 1 + maxsize) % maxsize;
    	}
    }
    template<class T>
    void Deque<T>::pop_front()
    {
    	if (empty())
    		cout << "队列为空,不能删除" << endl;
    	else
    	{
    		start = (start + 1 + maxsize) % maxsize;
    	}
    }
    template<class T>
    int Deque<T>::at(int x)
    {
    	int r = (start + x + maxsize) % maxsize;
    	return elements[r];
    }
    template<class T>
    T Deque<T>::operator[](int x)
    {
    	return elements[(start + x+maxsize)%maxsize];
    }
    int main()
    {
    	Deque<int>q;
    	q.push_back(3);
    	q.push_back(4);
    	q.push_back(5);
    	q.push_back(6);
    	q.push_front(7);
    	cout << q.front() << endl;
    	cout << q.back() << endl;
    	cout << q.at(3) << endl;
    	cout << q[0] << endl;
    	q.empty();
    	q.pop_back();
    	q.pop_front();
    	cout << q.front() << endl;
    	cout << q.back() << endl;
    }
    
    
  • 相关阅读:
    Sublime Text3 python自动补全问题——Sublime Text3安装Anaconda插件
    微信小程序如何刷新当前界面
    No 'Access-Control-Allow-Origin' header is present on the requested resource——Web Api跨域问题
    云时代架构阅读笔记四——线程池是如何使我们的应用变快的?
    jQuery实现图片放大镜效果
    云时代架构阅读笔记三——架构师比程序员厉害在哪里?
    Ajax学习系列——jQuery中Ajax的请求方式
    读书笔记:梯度是怎么消失的
    读书笔记:初始化神经网络
    读书笔记:对抗过拟合
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811925.html
Copyright © 2011-2022 走看看