1. 程式人生 > >【資料結構(C++實現)】:佇列(queue)

【資料結構(C++實現)】:佇列(queue)

  • C++實現


/*資料結構:佇列*/

#ifndef QUEUE_H
#define QUEUE_H

template <typename V>
class Node{
public:
    V val;
    Node<V>* next;
    Node(V val){
        this->val = val;
        next = NULL;
    }
};

template <typename V>
class Queue{
private:
    int length;
    Node<V>* head;
    Node<V>* tail;
public:
    Queue();
    ~Queue();
    void push(V val);
    V pop();
    V front();
    V back();
    bool empty(){return length==0;};
    int size(){return length;}
};
template <typename V>
Queue<V>::Queue(){
    length = 0;
    head = NULL;
    tail = NULL;
}
template <typename V>
Queue<V>::~Queue(){
    while(length>0)
        pop();
}
template <typename V>
void Queue<V>::push(V val){
    Node<V>* node = new Node<V>(val);
    if(head==NULL){
        head = node;
        tail = node;
    }else{
        tail->next = node;
        tail = tail->next;
    }
    length++;

}
template <typename V>
V Queue<V>::pop(){
    if(head==NULL)return NULL;
    Node<V>* node = head;
    head = head->next;
    V val = node->val;
    delete node;
    length--;
    return val;
}
template <typename V>
V Queue<V>::front(){
    return head->val;
}
template <typename V>
V Queue<V>::back(){
    return tail->val;
}


#endif // QUEUE_H
  • STL中的queue容器


/*資料結構:STL中的queue容器*/

#include <iostream>
#include <queue>

using namespace std;

int main()
{
    queue<double>* q = new queue<double>();
    for(int i=0;i<10;i++)
        q->push(i);
    cout<<endl<<"front="<<q->front();
    cout<<endl<<"back="<<q->back();
    cout<<endl<<"size="<<q->size();
    cout<<endl;
    while(!q->empty()){
        cout<<q->front()<<" ";
        q->pop();
    }
    delete q;
    return 0;
}