自建算法库——链队(链式队列)

实现源代码如下:

1.liqueue.h

/*   copyright (t) 2016,烟台大学计算机学院   *All rights reserved.   *文件工程名称:1.cbd   *作者:田长航  完成日期:2017年12月22日  *版本号:v1.0   *问题描述:定义链队存储结构,实现其基本运算,并完成测试。   要求:   1、头文件liqueue.h中定义数据结构并声明用于完成基本运算的函数。对应基本运算的函数包括:   void InitQueue(LiQueue *&q);  //初始化链队   void DestroyQueue(LiQueue *&q); //销毁链队   bool QueueEmpty(LiQueue *q);  //判断链队是否为空   int QueueLength(LiQueue *q);   //返回链队中元素个数,也称队列长度   bool enQueue(LiQueue *&q,ElemType e);   //进队   bool deQueue(LiQueue *&q,ElemType &e);  //出队   2、在liqueue.cpp中实现这些函数   3、在main函数中完成测试,包括如下内容:   (1)初始化队列q   (2)依次进队列元素a,b,c   (3)判断队列是否为空   (4)出队一个元素   (5)输出队列中元素个数   (6)依次进队列元素d,e,f   (7)输出队列中元素个数   (8)将队列中所有元素删除,并输出序列   (9)释放队列   *输入描述:无   *程序输出:完成测试后的运行结果   */
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);      //出队

2.liqueue.cpp

#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(LiQueue *q)                 //判断链队是否为空
{    return (q->rear==NULL);
}
int QueueLength(LiQueue *q)                 //返回链队中元素个数,也称队列长度
{    QNode *p=q->front;    int length=0;                           //设计数变量,记录表长    while(p!=NULL)    {    length++;    p=p->next;    }    return length;
}
void enQueue(LiQueue *&q,ElemType e)        //进队
{    QNode *p;    p=(QNode *)malloc(sizeof(QNode));    p->data=e;    p->next=NULL;                           //创建data域为e、指针域为NULL的数据节点*p    if(q->rear==NULL)    q->front=q->rear=p;    else    {    q->rear->next=p;    q->rear=p;    }
}
bool deQueue(LiQueue *&q,ElemType &e)       //出队 需考虑队列为空的情况,故设置函数类型为bool型
{    QNode *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;
}    

3.main.cpp

#include <stdio.h>
#include <malloc.h>
#include "liqueue.h"
int main()
{    LiQueue *q;    ElemType e;    InitQueue(q);                           //初始化队列q    printf("该队列已被初始化!\n");    if(QueueEmpty(q))                       //判断队列是否为空    printf("该队列为空\n");    else    printf("该队列不为空\n");    enQueue(q,'a');                         //依次进队列元素a,b,c    enQueue(q,'b');    enQueue(q,'c');    printf("元素a,b,c进队后,");    if(QueueEmpty(q))                       //判断队列是否为空    printf("该队列为空\n");    else    printf("该队列不为空\n");    if(deQueue(q,e)==0)                     //出队一个元素    printf("此队列已为空,出队操作失败!\n");    printf("出队成功,出队元素为%c\n",e);    printf("此时队列中元素个数为:%d\n",QueueLength(q));   //输出队列中元素个数    enQueue(q,'d');                         //依次进队列元素d,e,f    enQueue(q,'e');    enQueue(q,'f');    printf("元素d,e,f进队后,队列中元素个数为:%d\n",QueueLength(q));   //输出队列中元素个数    printf("出队序列为:");                 //将队列中所有元素删除,并输出序列    while(!QueueEmpty(q))    {    deQueue(q,e);    printf("%c",e);    }    printf("\n");    DestroyQueue(q);                        //释放队列    printf("该队列已释放!\n");    return 0;
}    

运行结果截图如下:

数据结构上机实践第七周项目2 - 自建算法库——链队(链式队列)相关推荐

  1. 数据结构上机实践第七周项目1 - 自建算法库——顺序环形队列

    自建算法库--顺序环形队列 本次实践将建立顺序环形队列的算法库,用于之后的工程中 实现源代码如下: 1.squeue.h /* copyright (t) 2017,烟台大学计算机学院 *All ri ...

  2. 数据结构上机实践第八周项目9-广义表算法库及应用

    广义表算法库及应用 为了丰富算法库,以应对各类工程的需要,本次实践将进行广义表算法库的建立以及应用. 项目要求一: 建立广义表算法库,包括:  ① 头文glist.h,定义数据类型,声明函数:  ② ...

  3. 数据结构上机实践第11周项目1 - 图基本算法库

    图基本算法库   本次实践将建立图的基本算法库,用以丰富算法库,灵活应对更多样的工程,所谓"技多不压身",算法亦如此.   本次实践将运用多文件组织工程的建立,点击此处参考.(编译 ...

  4. 数据结构上机实践第八周项目3-顺序串算法

    顺序串算法 本次实践项目要求如下: 采用顺序存储方式存储串,实现下列算法并测试:  (1)试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符:  void Trans(SqString * ...

  5. 数据结构上机实践第13周项目1 - 验证Prim算法的验证

    验证Prim算法的验证 本次实践所用到的算法库点击此处. 实现源代码: //*Copyright (c)2017,烟台大学计算机与控制工程学院* //*All rights reservrd.* // ...

  6. 数据结构上机实践第11周项目3 - 图遍历算法实现

    图遍历算法实现 本次实践将运用图结构基本算法库,进行遍历操作的实现,本次实践到的算法库点击此处参考.(编译环境:VC++6.0) 1.深度优先遍历--DFS 测试用图: 测试时用的图是,可以使用其他类 ...

  7. 数据结构上机实践第七周项目4 - 队列数组

    /* copyright (t) 2017,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:田长航 *完成日期:2016年10月14日 *版本号:v1. ...

  8. 数据结构上机实践第七周项目3 - 负数把正数赶出队列

    负数把正数赶出队列 使用本文所用的环形队列的算法库(sqqueue.h),点击此处参考 实现源代码如下: main.cpp /* copyright (t) 2017,烟台大学计算机学院 *All r ...

  9. 数据结构上机实践第三周项目4(2)—顺序表应用

    [项目 - 顺序表应用] 定义一个采用顺序结构存储的线性表,设计算法将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1). 项目中用到的算法库为list.cpp和list ...

最新文章

  1. 《C++成员函数重载、覆盖与隐藏》
  2. 15 -Flask构建弹幕微电影网站-基于角色的访问控制
  3. SVA Function Coverage
  4. linux镜像文件不要大于4g,Systemback制作大于4G的Ubuntu系统镜像
  5. 深入浅出Node.js (2) - 模块机制
  6. LeetCode——Backtracking
  7. CONTROLLER_NAME 常量 当前访问的控制器
  8. 树莓派Raspbian Buster/Debian 10 安装ROS
  9. 【Flink】Flink 消费 kafka 实现 限流处理 RateLimiter
  10. Pydev 的覆盖率测试python coverage以及其他使用
  11. Android Studio Prettify 插件
  12. Java实战之管家婆记账系统(16)——条形图展示数据界面及功能实现
  13. uCos中的信号量机制
  14. java中super的三种用法
  15. ZXing实现横竖屏扫描切换
  16. EI 收录的期刊有哪些
  17. C. Ehab and Path-etic MEXs
  18. 微信小程序开发 | 小程序开发框架
  19. 单片机-6位数码管动态时间扫描程序,具有时分秒
  20. 软件开发中的QA主要做什么的

热门文章

  1. Unity3D切换场景之后光源失效(物体变暗)问题
  2. bzoj 1055: [HAOI2008]玩具取名(区间DP)
  3. 吴恩达神经网络和深度学习-学习笔记-4-深度网络
  4. matlab2c使用c++实现matlab函数系列教程-rot90函数
  5. matlab简单分析矩阵乘法——一阶行向量乘一阶列向量
  6. 《视觉SLAM十四讲》课后习题—ch3
  7. Flask 模版(四)- 时间 Flask-Moment
  8. Alfred Remote初体验
  9. activereport
  10. [转载] 树莓派4B使用 Adafruit_PCA9685 报错IOError: [Errno 121] Remote I/O error解决办法