链队列的基本实现

链队列的基本实现:

1,定义结点

2,初始化队列时,需要头结点,使操作统一;有两个指针,一个头指针,一个尾指针,两个指针都指向头结点。

3,入队操作,需要在队 尾进行元素的入队,若一次多个元素入队,需要循环入队,最后一个元素的指针域为空

4,出队操作,队头元素出队,需要注意队头元素并不是头结点。多个元素出队时,要循环调用出队函数。

5,判空操作。

#include<iostream>
using namespace std;
template<class DataType>
struct Node
{
    DataType data;
    Node<DataType> *next;
};
template<class DataType>
class LinkQueue
{
private:
    Node<DataType> *front,*rear;
public:
    LinkQueue();//构造函数
    ~LinkQueue(){}//析构函数
    void EnQueue(DataType x);//入队
    DataType DeQueue();//出队
    DataType getQueue();//取出链队列的队头元素
    int Empty();//判空
};
template<class DataType>
LinkQueue<DataType>::LinkQueue()
{
    Node<DataType> *first;
    first=new Node<DataType>;//创建一个头结点
    first->next=NULL;
    front=rear=first;//头指针和尾指针都指向头结点
}
template<class DataType>
void LinkQueue<DataType>::EnQueue(DataType x)
{
    Node<DataType> *s;
    s=new Node<DataType>;
    s->data=x;
    s->next=NULL;
    rear->next=s;
    rear=s;
}
template<class DataType>
DataType LinkQueue<DataType>::DeQueue()
{
    if(front==rear) throw "下溢";
    Node<DataType> *p;
    p=front->next;
    DataType x;
    x=p->data;
    front->next=p->next;
    if(p->next==NULL) rear=front;
    delete p;
    return x;
}
template<class DataType>
DataType LinkQueue<DataType>::getQueue()
{
    if(front==rear) throw "下溢";
    return front->next->data;
}
template<class DataType>
int LinkQueue<DataType>::Empty()
{
    if(front==rear)
        return 1;
    else
        return 0;
}
int main()
{
    LinkQueue<int> lq1;
    //int a;
    //a=1;
    //lq1.EnQueue(a);
    int n=5;
    int a[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        lq1.EnQueue(a[i]);
    }
    for(int i=0;i<n;i++)
    {
         cout<<lq1.getQueue()<<endl;
         lq1.DeQueue();
    }

    cout<<lq1.Empty();
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值