第七周 【项目1-建立顺序环形队列算法库】
来源:互联网 发布:mysql linux登陆命令 编辑:程序博客网 时间:2024/06/06 19:19
顺序环形队列存储结构中的基本运算有如下几项:
1、初始化顺序环形结构
令front=rear=0 。
2、销毁顺序环形队列
用free()将其释放 。
3、判断顺序环形队列是否为空
通过front==rear 判断队列是否为空 。
4、判断顺序环形队列是否为满
通过(rear+1)%MaxSize==front 判断队列是否为满 。
5、进队
首先判断队列是否为满,如果满则返回false
如果不满则执行q->rear=(q->rear+1)%MaxSize; q->data[q->rear]=e; 返回为true 。
6、出队
首先判断队列是否为空,如果满则返回false
如果不空则执行q->front=(q->front+1)%MaxSize; e=q->data[q->front]; 返回为true 。
一、首先建立头文件sqqueue.h 在其中定义数据结构并声明基本运算函数
#ifndef SQQUEUE_H_INCLUDED#define SQQUEUE_H_INCLUDED#define MaxSize 5typedef char ElemType;typedef struct{ ElemType data[MaxSize]; //定义一个大小为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二、其次建立源文件 sqqueue .cpp,实现头文件中定义的基本运算函数
#include <stdio.h>#include <malloc.h>#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;}三、建立main.cpp 用来测试代码
#include <stdio.h>#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;}程序测试截图:
环形队列相对于直线队列来讲,直线队列在元素出队之后,头指针向后移动,导致删除元素后的空间无法再利用,即使元素个数小于空间大小,依然无法再进行插入,即所谓的“假溢出”,当变成循环队列之后,删除元素后的空间仍然可以利用,可以最大限度的利用空间。
- 第七周项目1-建立顺序环形队列算法库
- 第七周项目1 - 建立顺序环形队列算法库
- 第七周项目1建立顺序环形队列算法库
- 第七周 项目1 - 建立顺序环形队列算法库
- 第七周 项目1 建立顺序环形队列算法库
- 第七周 项目1-建立顺序环形队列算法库
- 第七周项目1-建立顺序环形队列算法库
- 第七周 项目1 建立顺序环形队列算法库
- 第七周-项目1 - 建立顺序环形队列算法库
- 第七周 项目1-建立顺序环形队列算法库
- 第七周 项目1-建立顺序环形队列算法库
- 第七周项目1--建立顺序环形队列算法库
- 第七周项目1-建立顺序环形队列算法库
- 第七周项目1-建立顺序环形队列算法库
- 第七周项目1-建立顺序环形队列算法库
- 第七周项目1--建立顺序环形队列算法库
- 第七周项目1建立顺序环形队列算法库
- 第七周项目1 建立顺序环形队列算法库
- 整理NLPIR基本功能函数
- ARC078
- 昂昂
- 云数据库管理与数据迁移可以认证了,是时候证明自己了
- C# 索引器
- 第七周 【项目1-建立顺序环形队列算法库】
- android AccessibilityService的学习和应用
- [学习笔记]上传文件到EC2主机
- 《Spring技术内幕》学习笔记3——IoC容器载入Bean定义资源文件
- 第7周项目2 建立链队算法库
- HashMap和Hashtable的区别
- Android Activity生命周期以及Fragment生命周期的区别与分析
- Android测试环境搭建(win7)
- 第五周项目三 括号的匹配