数据结构CC++版本-队列

queue.h

#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED

#include <iostream>
using namespace std;

void runQueueDemo();
void runQueueDemo2();

template<class T> class ArrayQueue{
        public:
                ArrayQueue();
                ~ArrayQueue();

                void add(T t);
                T front();
                T pop();
                int size();
                int is_empty();

        private:
                T *arr;
                int count;
};


#endif // QUEUE_H_INCLUDED

queue.cpp

#include "queue.h"
#include<queue>

// 创建队列,默认大小为12
template<class T>
ArrayQueue<T>::ArrayQueue(){
        arr = new T[12];
        if(!arr) {
                cout<<"arra malloc error!"<<endl;
        }
}

//销毁队列
template<class T>
ArrayQueue<T>::~ArrayQueue()
{
        if(arr) {
                delete[] arr;
                arr = NULL;
        }
}

//将val添加到队列的末尾
template<class T>
void ArrayQueue<T>::add(T t)
{
        arr[count++] = t;
}

template<class T>
T ArrayQueue<T>::front()
{
        return arr[0];
}

// 返回队列开头元素
template<class T>
T ArrayQueue<T>::pop()
{
        int i = 0;
        T ret = arr[0];

        count--;
        while(i++<count){
                arr[i-1] = arr[i];
        }
        return ret;
}

//返回队列的大小
template<class T>
int ArrayQueue<T>::size()
{
        return count;
}

//返回队列是否为空
template<class T>
int ArrayQueue<T>::is_empty(){
        return count == 0;
}


void runQueueDemo(){
        int tmp=0;
        ArrayQueue<int> *astack = new ArrayQueue<int>();

        //将10,20,30,依次推入到队列中
        astack->add(10);
        astack->add(20);
        astack->add(30);

        //将队列开头元素赋值给tmp,并删除该元素
        tmp = astack->pop();
        cout<<"tmp ="<<tmp<<endl;

        //只将队列开头的元素赋值给tmp,不删除该元素
        tmp = astack->front();
        cout<<"tmp="<<tmp<<endl;

        astack->add(40);
        cout<<"is_empty()="<<astack->is_empty()<<endl;
        cout<<"size()="<<astack->size()<<endl;
        while(!astack->is_empty()) {
                tmp = astack->pop();
                cout<<tmp<<endl;
        }
}


void runQueueDemo2(){
        int tmp=0;
        queue<int> iqueue;

        //将10,20,30依次加入队列的末尾
        iqueue.push(10);
        iqueue.push(20);
        iqueue.push(30);

        //删除队列开头的元素
        iqueue.pop();

        //将队列开头的元素赋值给tmp,不删除该元素
        tmp = iqueue.front();
        cout<<"tmp="<<tmp<<endl;

        //将40加入队列的末尾
        iqueue.push(40);

        cout<<"empty() =="<<iqueue.empty()<<endl;
        cout<<"size()="<<iqueue.size()<<endl;
        while(!iqueue.empty()) {
                tmp = iqueue.front();
                cout<<tmp<<endl;
                iqueue.pop();
        }
}

发布了167 篇原创文章 · 获赞 62 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/AdrianAndroid/article/details/100762282