第7周项目2 - 建立链队算法库
/**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 - 建立链队算法库相关推荐
- 第七周项目2建立链队算法库
/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第七周项目2.cpp 作 者:彭子竹 完成日期:2015年10月26日 版 ...
- 第五周 项目二 建立链栈算法库
/* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第5周项目2--建立链栈算法库.cpp 作 者:孙仁圆 完成日期:2017年 ...
- 数据结构上机实践第三周项目2 - 建设“顺序表”算法库
[项目2 - 建设"顺序表"算法库] 领会"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库.这一周,建的是顺序表的算法库. 算法库包括两 ...
- 第六周项目2建立链栈算法库
/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第六周项目2.cpp 作 者:彭子竹 完成日期:2015年10月23日 版 ...
- 数据结构上机实践第五周项目2 - 建立链栈算法库
建立链栈算法库 链式存储和顺序存储方式各有特点,各有缺点,上次实践建立了顺序栈的算法库,本次实践将建立链栈的算法库,用以应多更多多样化的问题.(编译环境:VC++6.0) 本次建立算法库需要建立多文件 ...
- 数据结构上机实践第八周项目1- 建立顺序串的算法库
建立顺序串的算法库 本次实践将建立顺序串的算法库,这样可以方便的将此算法运用于我们的所需的工程中,简化操作. 本次实践将用到多文件组织工程的建立,建立方法可以点击此处参照.(工程环境:Visual C ...
- 第十一周项目实践1 图基本算法库
#ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED#define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示 ...
- 第6周项目2--建立链栈算法库
** 问题及代码: ** /* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第6周项目2--建立链栈算法库.cpp 作 者:孙 ...
- 第3周 实践项目2 建设”顺序表“算法库(可参考为模板)
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目2 -建设"顺序表算法库" *作 者:邵雪源 ...
最新文章
- Java中 实体类 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
- Swift学习: 从Objective-C到Swift
- mysql集群session_集群/分布式环境下5种session处理策略
- webconfig的解决方案怎么添加_解决在Web.config或App.config中添加自定义配置的方法详解...
- 内存中的调用别的软件程序加密解密函数_公司加密软件哪个最好用?
- 美团和支付宝大战在所难免
- beeline安装_hive使用beeline配置远程连接
- Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?
- 企业用好大数据只需这6招
- MVpArms集成框架快速开发
- ghost12备份linux,用GHOST对LINUX系统做备份(转)
- springboot 使用mybatis与mybatis-generator与druid (gradle构建)
- 计算机工控机配置,研华工控机最新配置IPC-610
- 【模拟电子技术Analog Electronics Technology 20】—— 反馈放大电路分析2:各种类型反馈电路的计算分析
- 浅谈西门子840d主轴速度控制_西门子 840D 数控系统故障诊断与维修
- php ajax jquery瀑布流,jQuery瀑布流插件——jQuery.Waterfall
- 树形选择排序(锦标赛排序)
- 微信二级不死域名是什么意思?被封后还能访问吗?
- redhat linux 安装 gcc编译器
- 怎样在matlab中查找函数的具体代码,几种查看Matlab函数源代码的方法
热门文章
- 3年外包裸辞,面试阿里、字节全都一面挂,哭死.....
- 统计学习笔记:方差分析
- python 修正系统时差
- 毕业设计 基于树莓派的智能家庭监控系统
- MyEclipse 6.5GA 最新下载、注册、汉化(2008年11月更新)
- [DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问
- echarts警告:Can‘t get DOM width or height. Please check dom.clientWidth and dom.clientHeight. ........
- 优质的器材设备3d模型素材推荐,不容错过
- SpringBoot+redis 实现redis 库存|名额 扣减
- sql求中位数、四分位数