首页 > 编程语言 >链队列的实现,C++代码实现

链队列的实现,C++代码实现

时间:2023-08-27 11:33:12浏览次数:36  
标签:QNode 队列 linkQueue C++ next 实现 front rear


/*链队列的实现*/
#include <iostream>
using namespace std;


/*链队列类型定义*/
typedef struct QNode
{
    struct QNode * next;
    char data;
}QNode,*queuePtr;//结点的定义

typedef struct linkQueue
{
    queuePtr rear;
    queuePtr front;
}linkQueue;//队列的定义


/*链队列的初始化*/
void initQueue_L(linkQueue &Q)
{
    Q.front=Q.rear=new QNode;//为队列申请一个空间
    Q.front->next=0;//使队列的头指针指向空
}


/*销毁链队列*/
void destroyQueue_L(linkQueue &Q)
{
    while(Q.front)
    {
        queuePtr p;
        p=Q.front;
        Q.front=Q.front->next;
        delete p;//销毁链队列得把结点一个一个销毁掉
    }
}

/*求链队列的长度*/
int lengthQueue_L(linkQueue &Q)
{
    QNode *p;
    int count;
    p=Q.front->next;
    count=1;
    while(p)
    {
        p=p->next;
        count++;
    }
    return count;
}

/*入队*/
void enterQueue_L(linkQueue &Q,char x)
{
    QNode *p;
    p=new QNode;
    p->data=x;
    p->next=0;

    Q.rear->next=p;/*这里和顺序队列不一样,此处的rear不是指向队列最后一个元素的下一个位置,而就是指向队列的最后一个元素。要知道Q.rear和Q.front都是指针。*/
    Q.rear=p;
}//这里没有队满的情况。

/*出队*/
char outputQueue_L(linkQueue &Q)
{

    char x;
    if(Q.front->next==0)//这里得考虑队列空的情况。
        cout<<"Queue Empty!"<<endl;

    QNode *p;
    p=Q.front->next;/*应该注意顺序队列和链队列的不同之处,链队列中rear指向最后一个元素,front指向头结点,即第一个结点的前一个结点。而在顺序队列中正好相反,rear指向队列中的最后一个元素的下一个位置,而front就是指向第一个结点。*/
    x=p->data;

    Q.front->next=p->next;

    if(Q.rear==p)
        Q.rear=Q.front;

    delete p;

    return x;
}



void main()
{
    linkQueue Q;
    initQueue_L(Q);
    enterQueue_L(Q,'a');
    enterQueue_L(Q,'b');
    enterQueue_L(Q,'c');
    enterQueue_L(Q,'d');
    cout<<outputQueue_L(Q)<<endl;
    cout<<outputQueue_L(Q)<<endl;
    cout<<outputQueue_L(Q)<<endl;
    cout<<outputQueue_L(Q)<<endl;
    //cout<<outputQueue_L(Q)<<endl;
    destroyQueue_L(Q);
}

 

标签:QNode,队列,linkQueue,C++,next,实现,front,rear
From: https://blog.51cto.com/u_5173797/7252071

相关文章

  • 用拦截器实现session登录
    这个功能是这样的,用户在访问网站时,先要进行登录,即要访问处理登录的Action,若没有登录,即访问除了登录的Action之外的Action,则会被拦截器拦截,跳转到错误页面,提示用户还没有进行登录。所以这个拦截器的作用是如果是登录,即请求的是LoginAction,那么就不拦截这个请求,让其通过拦截器,进行登......
  • 实现拦截器的三种方法
    说是三种方法,实际上是一种方法,其实只要这个类实现了Interceptor接口,即可成为一个拦截器类。第一种方法就是直接实现Interceptor接口,这样的话,就要实现这个接口中的三个方法。第二种方法是继承自AbstractInterceptor类,这是个抽象类,实现了Interceptor接口,并且对里面的init()和destroy(......
  • 基于QT和C++实现的停车场管理系统
    基于QT和C++实现的停车场管理系统停车场管理系统简介一、 问题描述设停车场是一个可停放若干辆辆汽车的狭多层平面区域,且只有一个大门可供汽车进出。若车场内已停满汽车,则后来的汽车只能在门外的狭长便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入。每辆停放在......
  • 无涯教程-进程 - 消息队列
    使用消息队列的通信可以通过以下方式进行:通过一个进程写入共享内存,并通过另一个进程从共享内存读取。我们知道,读取也可以通过多个进程完成。由具有不同数据包的一个进程写入共享内存,并由多个进程(即根据消息类型)从共享内存中读取。看完消息队列上的某些信息后,现在该检查支持消......
  • 创建多线程继承Thread和实现Runnable以及synchronized的注意事项
    关于创建多线程继承Thread和实现Runnable以及synchronized的注意事项以下是利用多线程模拟购票的代码publicclassSell{publicstaticvoidmain(String[]args){Ticketticket=newTicket();Ticketticket1=newTicket();ticket.star......
  • Java实现数据导出到excel文件
    Java实现数据导出到excel文件使用的依赖:Apache提供的poi包首先导入依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>核心实现//创建一个工作簿,也就是Excel......
  • Java实现数据导出到excel文件
    Java实现数据导出到excel文件使用的依赖:Apache提供的poi包首先导入依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>核心实现//创建一个工作簿,也就是Excel......
  • 【GRU回归预测】基于门控循环单元GRU实现数据多维输入单输出预测附matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 基于Springboot的宜居酒店管理系统的设计与实现-计算机毕业设计源码+LW文档
    摘要信息化的迅速发展,对人们的衣食住行产生了很大影响。越来越多的人习惯并依赖于通过信息技术和智能化的形式来处理日常各类事物。为了满足管理者管理酒店的需要,以及适应现代化酒店管理的需求,决定开发宜居酒店管理系统。帮助管理员快速的在线管理,提高了效率。本系统是选择面向......
  • 旅游管理系统的设计与实现-计算机毕业设计源码+LW文档
    摘要随着社会经济的发展,各行业竞争激烈,年轻群体工作压力大,越来越多的人希望通过旅游来缓解压力。而传统的旅行社都是通过事先定制的线路和固定时间,没有个性化定制服务,不能满足现代用户的需求。对于此,开发旅游管理系统可以很好的解决用户个性化旅游的服务,通过系统查询各种景点信息,......