第六周--数据结构 项目之顺序环形队列
2015-10-18 20:41
691 查看
/*
*数据结构【线性表(二)链表】项目之顺序环形队列
*Copyright (c) 2015 烟台大学计算机与控制工程学院
*All right reserved.
*文件名称:list.cpp
*标题:数据结构【线性表(二)链表】之顺序环形队列
*分类:队列
*writer:罗海员
*date:2015年10月18日
*版本:V1.0.1
*操作系统:windows8
*运行环境:codeblocks
*问题描述:
*/
1.头文件:sqqueue.h,包含定义顺序环形队列数据结构的代码、宏定义、要实现算法的函数的声明;
#ifndef SQQUEUE_H_INCLUDED
#define SQQUEUE_H_INCLUDED
#define MaxSize 5
typedef 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
*数据结构【线性表(二)链表】项目之顺序环形队列
*Copyright (c) 2015 烟台大学计算机与控制工程学院
*All right reserved.
*文件名称:list.cpp
*标题:数据结构【线性表(二)链表】之顺序环形队列
*分类:队列
*writer:罗海员
*date:2015年10月18日
*版本:V1.0.1
*操作系统:windows8
*运行环境:codeblocks
*问题描述:
*/
1.头文件:sqqueue.h,包含定义顺序环形队列数据结构的代码、宏定义、要实现算法的函数的声明;
#ifndef SQQUEUE_H_INCLUDED
#define SQQUEUE_H_INCLUDED
#define MaxSize 5
typedef 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 <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; }
3.在同一项目(project)中建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。 #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; }
相关文章推荐
- C++基于栈实现铁轨问题
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- java数据结构之java实现栈
- 浅析栈区和堆区内存分配的区别
- 用Java代码实现栈数据结构的基本方法归纳
- 用PHP解决的一个栈的面试题
- 浅谈C#中堆和栈的区别(附上图解)
- JavaScript数据结构与算法之栈详解
- C语言之栈和堆(Stack && Heap)的优缺点及其使用区别
- Python实现栈的方法
- Java中堆和栈的区别详解
- java中堆和栈的区别分析
- C/C++函数调用栈的实现方法
- C++中静态存储区与栈以及堆的区别详解
- C++中用栈来判断括号字符串匹配问题的实现方法
- C++中栈结构建立与操作详细解析