• 链式队列


    链式队列

    链式队列,简称"链队列",即使用链表实现的队列存储结构。

    image.png

    结构体

    struct Node{
        DataType info;
        Node * next;
    };
    typedef Node* PNode;
    struct LinkQueue{
        PNode front;
        PNode rear;
    };
    
    typedef LinkQueue * PLinkQueue;

     

    创建一个空队列

     

    PLinkQueue createEmptyQueue(){
        PLinkQueue plqu = (PLinkQueue)malloc(sizeof(LinkQueue));
        if (plqu!=NULL)
        {
            plqu->front=NULL;
            plqu->rear =NULL;
        }else
        {
            cout<<"Out of space "<<endl;
            return NULL;
        }
        return plqu;
    }

     

     

     

    判断是否是空队列

    int isEmptyQueue(PLinkQueue plqu){
        return plqu->front==NULL;
    }

     

     

     

    进队运算

    例如,在图 1 的基础上,我们依次将 {1,2,3} 依次入队,各个数据元素入队的过程如图 2 所示:

    image.png

    void enQueue( PLinkQueue plqu, DataType x ) {
        PNode p;
        p = (PNode )malloc( sizeof( struct Node ) ); /*申请新结点空间*/
        if ( p == NULL ) 
            printf("Out of space!"); /*申请新结点失败*/
        else
        { 
            p->info = x;
            p->next = NULL; /*填写新结点信息*/
        if (plqu->front == NULL) 
            plqu->front = p; /*插入前是空队列*/
        else
            plqu->rear->next= p; /*将新结点插入*/
        plqu->rear = p; /*修改队尾指针*/
        }
        cout<<plqu->front->info<<"  ";
        cout<<plqu->rear->info<<" "<<endl;
    }

     

    出队运算

    当链式队列中,有数据元素需要出队时,按照 "先进先出" 的原则,只需将存储该数据的节点以及它之前入队的元素节点按照原则依次出队即可。这里,我们先学习如何将队头元素出队。

     

    链式队列中队头元素出队,需要做以下 3 步操作:

    1. 通过 top 指针直接找到队头节点,创建一个新指针 p 指向此即将出队的节点;
    2. 将 p 节点(即要出队的队头节点)从链表中摘除;
    3. 释放节点 p,回收其所占的内存空间;

     

    例如,在图 2b) 的基础上,我们将元素 1 和 2 出队,则操作过程如图 3 所示:

    image.png

     

    void deQueue(PLinkQueue plqu){
        PNode p;
        if (plqu->front==NULL)
        {
            cout<<"Empty queue"<<endl;
        }else
        {
            p=plqu->front;//取得头指针
            plqu->front=p->next;//修改头指针
            free(p);
        }
        //cout<<plqu->front->info<<"  ";
        //cout<<plqu->rear->info<<" "<<endl;
    }

     

    取对头元素

     

    DataType getFrontQueue(PLinkQueue plqu){
        if (plqu->front==NULL)
        {
            cout<<"Empty";
            return -1;
        }else
        {
            //   cout<<plqu->rear->info<<endl;
            return plqu->front->info;
        }
    }
     

    遍历

     

    void display(PLinkQueue plqu){
        PLinkQueue fr=plqu;
        if (plqu->front==NULL)
        {
            return;
        }else
        {
            while(fr->front!=NULL){
                cout<<fr->front->info<<" ";
                fr->front=fr->front->next;
            }
        }
    }

     

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/12983814.html

  • 相关阅读:
    Django Rest framework基础使用之Request/Response
    Django Rest framework基础使用之 serializer
    python基础(一)
    python实现本地图片上传到服务区
    开发中遇到的问题记录
    九、xadmin菜单分组管理
    leetcode-7-整数翻转
    leetcode-6-Z 字形变换
    leetcode-5-最长回文子串
    leetcode-3-无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/12983814.html
Copyright © 2020-2023  润新知