zoukankan      html  css  js  c++  java
  • 队列(链式)

    队列,是一种先进先出的线性表,它只允许在队头删除,在队尾插入,链式队列和单链表操作类似,但是有队首指针和队尾指针,下面是链式队列的表示和实现:

    #include <iostream>
    
    using namespace std;
    //队列的链式表现与实现
    struct QNode
    {
        int data;
        QNode *next;
    };
    struct LinkQueue
    {
        QNode * front;
        QNode * rear;
    };
    
    //初始化链式队列
    LinkQueue * InitQueue()
    {
        LinkQueue*lq = (LinkQueue*)malloc(sizeof(LinkQueue));
        if (!lq)
        {
            return NULL;
        }
        lq->front=NULL;
        lq->rear=NULL;
        return lq;
    }
    
    void  DestoryQueue(LinkQueue *lq)
    {
        while(lq->front)
        {
            QNode *p=lq->front->next;
            free(lq->front);
            lq->front=p;
        }
    
    }
    
    //插入元素e 队尾元素 插入时候先判断队列是否为空
    bool EnQueue(LinkQueue *lq,int e)
    {
        QNode *p=(QNode*)malloc(sizeof(QNode));
        if (p!=NULL)
        {
            p->data=e;
            p->next=NULL;
    
            if (lq->front==NULL&&lq->front==NULL)//判断空
            {
                lq->front=p;
            }
            else
            {
                lq->rear->next=p;
            }
            lq->rear=p;//队尾指针需要移到最后
            return true;
        }
        return false;
    }
    //删除队首元素 删除前先验空 e返回删除元素
    bool DeQueue(LinkQueue *lq,int &e)
    {
        if (lq->front==NULL&&lq->front==NULL)
        {
            return false;
        }
        QNode *qnode = lq->front;
        e=qnode->data;
        lq->front=qnode->next;
        free(qnode);
        return true;
        
    }
    
    void PrintQueue(LinkQueue *lq)
    {
        if (lq->front==NULL&&lq->front==NULL)
        {
            cout<<"sorry ,the queue is empty"<<endl;
            return;
        }
        cout<<"Now print the queue:"<<endl;
        QNode *p=NULL;
        p=lq->front;
        while(p)
        {
            cout<<p->data<<endl;
            p=p->next;
        }
    }
    
    void main()
    {
        LinkQueue *lq=NULL;
        if (!InitQueue())
        {
            cout<<"Initial Fail!"<<endl;
        }
        lq=InitQueue();
        int ElemNum=0;
        cout<<"请输入要插入元素的个数:";
        cin>>ElemNum;
        int Elem=0;
        for (int i=0;i<ElemNum;i++)
        {
            cout<<"请输入要插入第 "<<i+1<<" 个元素:";
            cin>>Elem;
            if (EnQueue(lq,Elem))
            {
                cout<<"插入成功"<<endl;;
            }
        }
        PrintQueue(lq);//打印队列
        int delnum;
        DeQueue(lq,delnum);//删除第一个元素
        cout<<"the delete num is :"<<delnum<<endl;
        PrintQueue(lq);//打印队列
        DestoryQueue(lq);//销毁队列
        PrintQueue(lq);//打印队列
    }

    执行结果如下图:

  • 相关阅读:
    后海日记(6)
    后海日记(6)
    后海日记(5)
    后海日记(5)
    TCP 连接的握手信息详解
    TCP 连接的握手信息详解
    java枚举类型的优势在哪里?--一个实例
    java枚举类型的优势在哪里?--一个实例
    网络基础之网络协议篇
    mysql之innodb引擎的共享表空间和独立表空间
  • 原文地址:https://www.cnblogs.com/mu-tou-man/p/3899571.html
Copyright © 2011-2022 走看看