链队列__QwQ__

链队列最大的优点便是不用担心上溢,因此也不存在假象溢出,基本语法和链栈大同小异
没看过的朋友可以参考一下之前的链栈
也没什么特别的,直接上代码吧OvO,一些细节上的问题已经注释好了

#include<iostream>
using namespace std;
template<typename T>
struct Node
{
    T data;
    Node* next;
};
template<typename T>
class LinkQueue
{
    Node<T>* front,*rear;
public:
    LinkQueue();
    ~LinkQueue();
    void EnQueue(T Data);
    void DeQueue();
    T GetQueue();
    bool isEmpty();
};
template<typename T>
LinkQueue<T>::LinkQueue()//这里我将两个指针都初始化为NULL,与常规的方法不太一样,没有设置头结点,因此后面判断队空的条件变为了front==NULL
{
    front= NULL;
    rear = NULL;
}
template<typename T>
LinkQueue<T>::~LinkQueue()
{
    while (front != NULL)
    {
        Node<T>* p = front;
        front = front->next;
        delete p;
    }
}
template<typename T>
void LinkQueue<T>::EnQueue(T Data)
{
    if (front == rear&&front == NULL)//由于没有设置头结点,因此入队时要分front为空和不为空两种情况
    {
        front = new Node<T>;
        front->data = Data;
        rear = front;
    }
    else
    {
        Node<T>* newnode = new Node<T>;
        newnode->data = Data;
        newnode->next = NULL;
        rear->next = newnode;
        rear = newnode;//将队尾修改为新入队的节点
    }
}
template<typename T>
void LinkQueue<T>::DeQueue()
{
    if (front == NULL)//这里入队条件改成了front==NULL
    {
        cout << "队空" << endl;
        return;
    }
    Node<T>* p = front;
    cout << p->data << endl;
    front = front->next;
    delete p;
}
template<typename T>
T LinkQueue<T>::GetQueue()
{
    if (front== NULL)
    {
        cout << "队空" << endl;
        return -1;
    }
    return front->data;
}
template<typename T>
bool LinkQueue<T>::isEmpty()
{
    if (front == NULL)
        return true;
    else
        return false;
}
int main()
{
    LinkQueue<int> a;
    a.EnQueue(1);
    a.EnQueue(2);
    a.EnQueue(3);
    a.DeQueue();
    cout<<a.GetQueue()<<endl;
    a.DeQueue();
    cout << a.GetQueue() << endl;
    if (a.isEmpty())
        cout << "队为空" << endl;
}

猜你喜欢

转载自blog.csdn.net/qq_46601338/article/details/107426706
qwq