• C++用数组和链表分别实现Queue


    C++用数组和链表分别实现Queue

    昨天写了《C++用数组和链表分别实现Stack》,今天就是《C++用数组和链表分别实现Queue》,

    队列就是先来的先被处理掉,后来的就等,直到成为先来的,实现起来感觉和栈差不多。

    模板好用的,功能强大,有些东东还是写成模板的好,废话昨天都说了,今天是不想说的,

    博客园的哥们说我的博客不符合推荐到首页的要求,只好加几句废话。

    链表版
    template<typename T,typename container>
    class queue
    {
    public:
    bool empty() const
    {
    return len==0;
    }

    void checkEmpty()
    {
    if(empty())
    {
    throw new exception("队列中没有数据");
    }
    }

    T
    & back()
    {
    checkEmpty();
    return cur->val;
    }

    const T& back() const
    {
    return back();
    }

    void pop()
    {
    checkEmpty();
    if(head->next==cur)
    {
    delete head
    ->next;
    head
    ->next=NULL;
    }
    else
    {
    node
    * tmp=head->next;
    head
    ->next=tmp->next;
    delete tmp;
    }
    --len;
    }

    T
    & front()
    {
    checkEmpty();
    return head->next->val;
    }

    const T& front() const
    {
    return front();
    }

    void push(const T& val)
    {
    node
    *tmp=new node(val);
    cur
    ->next=tmp;
    cur
    =tmp;
    ++len;
    }

    queue()
    {
    initialize();
    }

    explicit queue(const container& cont)
    {
    initialize();
    vector
    <int>::const_iterator iter=cont.begin();
    while(iter!=cont.end())
    {
    push(
    *iter++);
    }
    }

    ~queue()
    {
    node
    *tmp;
    while(tmp!=NULL)
    {
    tmp
    =head;
    head
    =head->next;
    delete tmp;
    tmp
    =NULL;
    }
    delete cur;
    }


    int size()
    {
    return len;
    }

    protected:
    typedef
    struct node1
    {
    node1
    *next;
    T val;
    node1(T v):val(v),next(NULL){}
    }node;

    private :
    int len;
    node
    *head;
    node
    *cur;
    void initialize()
    {
    head
    =new node(-1);
    cur
    =head;
    len
    =0;
    }
    };
    数组版

    template
    <typename T,typename container>
    class queue
    {
    public:
    bool empty() const
    {
    return head==rail;
    }

    void checkEmpty()
    {
    if(empty())
    {
    throw new exception("队列中没有数据");
    }
    }

    //队尾元素
    T& back()
    {
    checkEmpty();
    return arr[rail-1];
    }

    const T& back() const
    {
    return back();
    }

    //出队
    void pop()
    {
    checkEmpty();
    arr[head
    ++]=0;
    }

    //队头元素
    T& front()
    {
    checkEmpty();
    return arr[head];
    }

    const T& front() const
    {
    return front();
    }

    //入队
    void push(const T& val)
    {
    if(rail>=capacity){
    capacity
    =(rail-head)*2;
    T
    *tmp=new T[capacity];
    int j=0;
    for(int i=head;i<rail;i++)
    {
    tmp[j
    ++]=arr[i];
    }
    delete arr;
    arr
    =tmp;
    rail
    =rail-head;
    head
    =0;
    }
    arr[rail
    ++]=val;
    }

    queue()
    {
    initialize(
    4);
    }

    queue(
    int capacity)
    {
    initialize(capacity);
    }

    explicit queue(const container& cont)
    {
    initialize(cont.size());
    vector
    <int>::const_iterator iter=cont.begin();
    while(iter!=cont.end())
    {
    push(
    *iter++);
    }
    }

    ~queue()
    {
    delete arr;
    }

    //队列中元素个数
    int size()
    {
    return rail-head;
    }

    protected:
    typedef
    struct node1
    {
    node1
    *next;
    T val;
    node1(T v):val(v),next(NULL){}
    }node;

    private :
    int capacity;
    int head;//对头元素的位置
    int rail;//对尾元素的位置
    int *arr;

    void initialize(int cap)
    {
    capacity
    =cap;
    arr
    =new int[capacity];
    head
    =rail=0;
    }
    };



    作者:陈太汉

  • 相关阅读:
    Python rindex()方法
    Python rfind()方法
    Python replace()方法
    服务器技术综述(三)
    服务器技术综述(二)
    服务器技术综述(一)
    TensorRT-优化-原理
    TensorRT-安装-使用
    TensorRT 加速性能分析
    GPU加速:宽深度推理
  • 原文地址:https://www.cnblogs.com/hlxs/p/2104386.html
Copyright © 2020-2023  润新知