博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之自建算法库——顺序环形队列
阅读量:6102 次
发布时间:2019-06-20

本文共 2383 字,大约阅读时间需要 7 分钟。

本文针对中第9课时。

按照“0207将算法变程序”[]部分建议的方法,建设自己的专业基础设施算法库。

下图是数据存储结构设计及各种操作实现的要点:

这里写图片描述

顺序环形队列算法库采用程序的多文件组织形式,包括两个文件:

  
  1.头文件:sqqueue.h,包含定义顺序环形队列数据结构的代码、宏定义、要实现算法的函数的声明;

#ifndef SQQUEUE_H_INCLUDED#define SQQUEUE_H_INCLUDED#define MaxSize 5typedef char ElemType;typedef struct{    ElemType data[MaxSize];    int front,rear;     /*队首和队尾指针*/} SqQueue;void InitQueue(SqQueue *&q);  //初始化顺序环形队列void DestroyQueue(SqQueue *&q); //销毁顺序环形队列bool QueueEmpty(SqQueue *q);  //判断顺序环形队列是否为空int QueueLength(SqQueue *q);   //返回队列中元素个数,也称队列长度bool enQueue(SqQueue *&q,ElemType e);   //进队bool deQueue(SqQueue *&q,ElemType &e);  //出队#endif // SQQUEUE_H_INCLUDED

  2.源文件:sqqueue.cpp,包含实现各种算法的函数的定义

#include 
#include
#include "sqqueue.h"void InitQueue(SqQueue *&q) //初始化顺序环形队列{ q=(SqQueue *)malloc (sizeof(SqQueue)); q->front=q->rear=0;}void DestroyQueue(SqQueue *&q) //销毁顺序环形队列{ free(q);}bool QueueEmpty(SqQueue *q) //判断顺序环形队列是否为空{ return(q->front==q->rear);}int QueueLength(SqQueue *q) //返回队列中元素个数,也称队列长度{ return (q->rear-q->front+MaxSize)%MaxSize;}bool enQueue(SqQueue *&q,ElemType e) //进队{ if ((q->rear+1)%MaxSize==q->front) //队满上溢出 return false; q->rear=(q->rear+1)%MaxSize; q->data[q->rear]=e; return true;}bool deQueue(SqQueue *&q,ElemType &e) //出队{ if (q->front==q->rear) //队空下溢出 return false; q->front=(q->front+1)%MaxSize; e=q->data[q->front]; return true;}

  3.在同一项目(project)中建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。 例:

#include 
#include "sqqueue.h"int main(){ ElemType e; SqQueue *q; printf("(1)初始化队列q\n"); InitQueue(q); printf("(2)依次进队列元素a,b,c\n"); if (enQueue(q,'a')==0) printf("队满,不能进队\n"); if (enQueue(q,'b')==0) printf("队满,不能进队\n"); if (enQueue(q,'c')==0) printf("队满,不能进队\n"); 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"); if (enQueue(q,'d')==0) printf("队满,不能进队\n"); if (enQueue(q,'e')==0) printf("队满,不能进队\n"); if (enQueue(q,'f')==0) printf("队满,不能进队\n"); 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;}
你可能感兴趣的文章
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>
设计模式(十一):FACADE外观模式 -- 结构型模式
查看>>
iOS xcodebuile 自动编译打包ipa
查看>>
程序员眼中的 SQL Server-执行计划教会我如何创建索引?
查看>>
【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
查看>>
cmake总结
查看>>
数据加密插件
查看>>
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
ViewPager切换动画PageTransformer使用
查看>>
coco2d-x 基于视口的地图设计
查看>>