/**Copyright (c) 2017, 烟台大学计算机学院*All rights reserved.*文件名称:DSitem7-2.cpp*作    者:于子淇*完成日期:2017年10月12日*版 本 号:Code::Blocks 13.12**问题描述:定义链队存储结构,实现其基本运算,并完成测试。*输入描述:无*程序输出:见程序运行结果演示*/

liqueue.h

#ifndef LIQUEUE_H_INCLUDED
#define LIQUEUE_H_INCLUDEDtypedef 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

main.cpp

#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");elseprintf("(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;
}

liqueue.cpp

#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;   //p指向队头数据节点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)  //返回队列中数据元素个数
{int n=0;QNode *p=q->front;while (p!=NULL){n++;p=p->next;}return(n);
}
void enQueue(LiQueue *&q,ElemType e)  //入队
{QNode *p;p=(QNode *)malloc(sizeof(QNode));p->data=e;p->next=NULL;if (q->rear==NULL)      //若链队为空,则新节点是队首节点又是队尾节点q->front=q->rear=p;else{q->rear->next=p;    //将*p节点链到队尾,并将rear指向它q->rear=p;}
}
bool deQueue(LiQueue *&q,ElemType &e)   //出队
{QNode *t;if (q->rear==NULL)      //队列为空return false;t=q->front;             //t指向第一个数据节点if (q->front==q->rear)  //队列中只有一个节点时q->front=q->rear=NULL;else                    //队列中有多个节点时q->front=q->front->next;e=t->data;free(t);return true;
}

程序运行结果演示:

学习心得:
队列中数据元素的逻辑关系呈线性关系,所以队列可以像线性表一样采用链式存储结构。

队空的条件:q->rear==NULL(也可以q->front==NULL)
队满的条件:不考虑

第7周项目2 - 建立链队算法库相关推荐

  1. 第七周项目2建立链队算法库

    /* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第七周项目2.cpp 作 者:彭子竹 完成日期:2015年10月26日 版 ...

  2. 第五周 项目二 建立链栈算法库

    /* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第5周项目2--建立链栈算法库.cpp 作 者:孙仁圆 完成日期:2017年 ...

  3. 数据结构上机实践第三周项目2 - 建设“顺序表”算法库

    [项目2 - 建设"顺序表"算法库]  领会"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库.这一周,建的是顺序表的算法库.  算法库包括两 ...

  4. 第六周项目2建立链栈算法库

    /* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第六周项目2.cpp 作 者:彭子竹 完成日期:2015年10月23日 版 ...

  5. 数据结构上机实践第五周项目2 - 建立链栈算法库

    建立链栈算法库 链式存储和顺序存储方式各有特点,各有缺点,上次实践建立了顺序栈的算法库,本次实践将建立链栈的算法库,用以应多更多多样化的问题.(编译环境:VC++6.0) 本次建立算法库需要建立多文件 ...

  6. 数据结构上机实践第八周项目1- 建立顺序串的算法库

    建立顺序串的算法库 本次实践将建立顺序串的算法库,这样可以方便的将此算法运用于我们的所需的工程中,简化操作. 本次实践将用到多文件组织工程的建立,建立方法可以点击此处参照.(工程环境:Visual C ...

  7. 第十一周项目实践1 图基本算法库

    #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED#define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示 ...

  8. 第6周项目2--建立链栈算法库

    ** 问题及代码: ** /* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第6周项目2--建立链栈算法库.cpp 作 者:孙 ...

  9. 第3周 实践项目2 建设”顺序表“算法库(可参考为模板)

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目2 -建设"顺序表算法库" *作 者:邵雪源 ...

最新文章

  1. Java中 实体类 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
  2. Swift学习: 从Objective-C到Swift
  3. mysql集群session_集群/分布式环境下5种session处理策略
  4. webconfig的解决方案怎么添加_解决在Web.config或App.config中添加自定义配置的方法详解...
  5. 内存中的调用别的软件程序加密解密函数_公司加密软件哪个最好用?
  6. 美团和支付宝大战在所难免
  7. beeline安装_hive使用beeline配置远程连接
  8. Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?
  9. 企业用好大数据只需这6招
  10. MVpArms集成框架快速开发
  11. ghost12备份linux,用GHOST对LINUX系统做备份(转)
  12. springboot 使用mybatis与mybatis-generator与druid (gradle构建)
  13. 计算机工控机配置,研华工控机最新配置IPC-610
  14. 【模拟电子技术Analog Electronics Technology 20】—— 反馈放大电路分析2:各种类型反馈电路的计算分析
  15. 浅谈西门子840d主轴速度控制_西门子 840D 数控系统故障诊断与维修
  16. php ajax jquery瀑布流,jQuery瀑布流插件——jQuery.Waterfall
  17. 树形选择排序(锦标赛排序)
  18. 微信二级不死域名是什么意思?被封后还能访问吗?
  19. redhat linux 安装 gcc编译器
  20. 怎样在matlab中查找函数的具体代码,几种查看Matlab函数源代码的方法

热门文章

  1. 3年外包裸辞,面试阿里、字节全都一面挂,哭死.....
  2. 统计学习笔记:方差分析
  3. python 修正系统时差
  4. 毕业设计 基于树莓派的智能家庭监控系统
  5. MyEclipse 6.5GA 最新下载、注册、汉化(2008年11月更新)
  6. [DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问
  7. echarts警告:Can‘t get DOM width or height. Please check dom.clientWidth and dom.clientHeight. ........
  8. 优质的器材设备3d模型素材推荐,不容错过
  9. SpringBoot+redis 实现redis 库存|名额 扣减
  10. sql求中位数、四分位数