第七周 项目二 建立链队算法库

66 篇文章 3 订阅
  1. /* 
  2. * Copyright(c) 2017,烟台大学计算机学院 
  3. * All rights reserved. 
  4. * 文件名称:a
  5. * 作    者:张翠平 
  6. * 完成日期:2017 年 10 月 11 日 
  7. * 版 本 号:v1.0 
  8. * 
  9. * 问题描述:定义链队存储结构,实现其基本运算,并完成测试。
  10. * 输入描述:无
  11. * 程序输出:实现基本运算后的输出结果。
  12. */  
  13. 问题代码:
  14. liqueue.h
  15. #ifndef LIQUEUE_H_INCLUDED
    #define LIQUEUE_H_INCLUDED
    
    typedef char ElemType;
    typedef struct qnode
    {
        ElemType data;
        struct qnode *next;
    } QNode;        //链队数据结点类型定义
    
    typedef struct
    {
        QNode *front;
        QNode *rear;
    } LiQueue;          //链队类型定义
    void InitQueue(LiQueue *&q);  //初始化链队
    void DestroyQueue(LiQueue *&q);  //销毁链队
    bool QueueEmpty(LiQueue *q);  //判断链队是否为空
    int QueueLength(LiQueue *q);  //返回队列中数据元素个数
    void enQueue(LiQueue *&q,ElemType e);  //入队
    bool deQueue(LiQueue *&q,ElemType &e);   //出队
    
    #endif // LIQUEUE_H_INCLUDED


  16. liqueue.cpp
    
  17. #include<stdio.h>
    #include<malloc.h>
    #include"liqueue.h"
    void InitQueue(LiQueue *&q)
    {
        q=(LiQueue *)malloc(sizeof(LiQueue));
        q->front=q->rear=NULL;
    }
    void DestroyQueue(LiQueue *&q)
    {
        QNode *p=q->front,*r;
        if(p!=NULL)
        {
            r=p->next;
            while(r!=NULL)
            {
                free(p);
                p=r;
                r=p->next;
            }
        }
        free(p);
        free(q);
    }
    bool QueueEmpty(LinkQuNode *q)
    {
        return(q->rear==NULL);
    }
    int QueueLength(LiQueue *q)
    {
        int n=0;
        QNode *p=q->front;
        while(p!=NULL)
        {
            n++;
            p=p->next;
        }
        return(n);
    }
    void enQueue(LinkQuNode *&q,ElemType e)
    {
        DataNode *p;
        p=(DataNode *)malloc(sizeof(DataNode));
        p->data=e;
        p->next=NULL;
        if(q->rear==NULL)
            q->front=q->rear=p;
        else
        {
            q->rear->next=p;
            q->rear=p;
        }
    }
    bool deQueue(LinkQuNode *&q,ElemType &e)
    {
        DataNode *t;
        if(q->rear==NULL)
            return false;
        t=q->front;
        if(q->front==q->rear)
            q->front=q->rear=NULL;
        else
            q->front=q->front->next;
        e=t->data;
        free(t);
        return true;
        
    }


    
    
  18. main.cpp
  19. #include <stdio.h>
    #include "liqueue.h"
    
    int main()
    {
        ElemType e;
        LiQueue *q;
        printf("(1)初始化链队q\n");
        InitQueue(q);
        printf("(2)依次进链队元素a,b,c\n");
        enQueue(q,'a');
        enQueue(q,'b');
        enQueue(q,'c');
        printf("(3)链队为%s\n",(QueueEmpty(q)?"空":"非空"));
        if (deQueue(q,e)==0)
            printf("队空,不能出队\n");
        else
            printf("(4)出队一个元素%c\n",e);
        printf("(5)链队q的元素个数:%d\n",QueueLength(q));
        printf("(6)依次进链队元素d,e,f\n");
        enQueue(q,'d');
        enQueue(q,'e');
        enQueue(q,'f');
        printf("(7)链队q的元素个数:%d\n",QueueLength(q));
        printf("(8)出链队序列:");
        while (!QueueEmpty(q))
        {
            deQueue(q,e);
            printf("%c ",e);
        }
        printf("\n");
        printf("(9)释放链队\n");
        DestroyQueue(q);
        return 0;
    }


    
    
    
    


运行结果:


知识点总结:
  与顺序环形队列算法库的建立也是类似的。

心得体会:
  认真理解每个语句的意思,熟练掌握代码,有自己的思维方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值