C++实现链式队列的操作

  • 队列的初始化
  • 队列的判空
  • 在队尾插入元素
  • 在队首删除元素
  • 显示队列
  • 队列查询
  • 计算队列长度
  • 销毁队列

队列是一种线性结构,和链表不同之处在于队列有两个指针操作,一个是队首指针,一个是队尾指针,节点删除移动队首指针,节点插入移动队尾指针,同时队列具有先进先出的特点,以下是队列基本操作的C++代码,希望对大家有所帮助!

#include<iostream>
using namespace std;
class QNode {
public:
    int data;
    QNode *qnext;
};
class Linkqueue {
public:
    void InitQueue(Linkqueue &Q);
    void IsEmpty(Linkqueue &Q);
    void EnQueue(Linkqueue &Q);
    void DeQueue(Linkqueue &Q);
    void showqueue(Linkqueue &Q);
    void findQueue(Linkqueue &Q, int value);
    int getlength(Linkqueue &Q);
    void destroyQueue(Linkqueue &Q);

private:
    QNode *front;
    QNode *rear;
};
//队列的初始化
void Linkqueue::InitQueue(Linkqueue &Q) {
    QNode *p = new QNode;
    p->qnext = NULL;
    Q.front = p;
    Q.rear = p;
}
//队列的判空
void Linkqueue::IsEmpty(Linkqueue &Q) {
    if (Q.rear == Q.front) {
        cout << "该队列为空队列";
    }
    else
        cout << "该队列不是空队列";
    cout << endl;
}
//队列节点的插入
void Linkqueue::EnQueue(Linkqueue &Q) {
    QNode *pnew = new QNode;
    pnew->qnext = NULL;
    cout << "请输入该节点的数值 = ";
    cin >> pnew->data;
    Q.rear->qnext = pnew;
    Q.rear = pnew;
}
//队列节点的删除
void Linkqueue::DeQueue(Linkqueue &Q)
{
    QNode *p;
    p = Q.front->qnext;
    Q.front->qnext = Q.front->qnext->qnext;     
    if (Q.rear == p)   
        Q.rear = Q.front;
    delete p;
}
//显示队列
void Linkqueue::showqueue(Linkqueue &Q) {
    QNode *p;
    p = Q.front->qnext;
    if (p == NULL)  
    {
        cout << "队列为空" << endl;
    }
    cout << endl;
    while (p != NULL)
    {
        cout << p->data << " ";
        p = p->qnext;
    }
    cout << endl;
}
//队列查询
void Linkqueue::findQueue(Linkqueue &Q, int value) {
    QNode *ptarget;
    ptarget = Q.front;
    int n = 0;
    cout << "数据值为" << value << "的位置=";
    while (ptarget != Q.rear) {
        if (ptarget->data == value) {
            cout << n + 1 << " ";
        }
        n = n + 1;
        ptarget = ptarget->qnext;
    }
    cout << endl;
}
//计算队列长度
int Linkqueue::getlength(Linkqueue &Q) {
    int length = 0;
    QNode *p1 = Q.front;
    QNode *p2 = Q.rear;
    while (p1 != p2) {
        p1 = p1->qnext;
        length++;
    }
    cout << "队列长度=" << length << endl;
    return length;
}
//销毁队列
void Linkqueue::destroyQueue(Linkqueue &Q) {
    while (Q.front)
    {
        Q.rear = Q.front->qnext;
        delete Q.front;
        Q.front = Q.rear;
    }
}
int main() {
    Linkqueue queue;
    Linkqueue *Q;
    int n;
    Q = new Linkqueue;
    queue.InitQueue(*Q);
    cout << "请输入需要的队列节点数 = ";
    cin >> n;
    for (int i = 0; i < n; i++) {
        queue.EnQueue(*Q);
    }
    cout << "队列节点为:";
    queue.showqueue(*Q);
    cout << "删除队首节点后为:";
    queue.DeQueue(*Q);
    queue.showqueue(*Q);
    queue.findQueue(*Q, 1);
    queue.getlength(*Q);
    queue.IsEmpty(*Q);
    queue.destroyQueue(*Q);
    return 0;
}

代码运行结果:
这里写图片描述

  • 12
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值