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);//打印队列
    }

    执行结果如下图:

  • 相关阅读:
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    210 Course ScheduleII
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    sql 开发经验
  • 原文地址:https://www.cnblogs.com/mu-tou-man/p/3899571.html
Copyright © 2011-2022 走看看