实验1.2 顺序循环队列的实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1.2顺序循环队列的实现
实验目的
1.熟悉并能实现顺序循环队列的定义和基本操作。
2.了解用队列解决实际应用问题。
实验要求
1、在给定的存储结构和空间大小的条件下,定义循环队列的初始化函数;
2、在少用一个单元的条件下定义队列的入队函数;
3、定义队列的出队函数;
4、定义判断队空函数;
5、定义销毁队列函数;
请按任意键继续. . .
数据结构设计
typedefstructSeqQueue
{
private:
int*base;/*初始化时动态分配空间*/
intrear , front;/*队头队尾指示器*/
intMaxsize;
}SeqQueue
voidSeqQueue(intsz );//初始化
boolEnQueue(inte);//入队
boolDeQueue (int&e);//出队
voidDestroyQueue( );//销毁队列
boolIsEmpty();//判断队空
voidMakeEmpty();
};
程序实现
3.顺序循环队列的实现
根据对顺序循环队列的分析,其结构体定义如下:
typedef struct {
DataType queue[MaxQueueSize];
}
}
(4)出队列
QueueDelete(SeqCQueue*Q,DataType *d)
int QueueDelete(SeqCQueue*Q,DataType *d) /*删除顺序循环队列Q的队头元素并赋给d,成功返回1,失败返回0*/
{
if(Q->count==0)
{ printf(“队列已空无数据元素出队列!\n”);
{
if(Q.count!=0)return 1;
else return 0;
}
(3)入队列
QueueAppend(SeqCQueue *Q,DataType x)
int QueueAppend(SeqCQueue *Q,DataType x) /*把数据元素值x插入顺序循环队列Q的队尾,成功返回1,失败则返回0*/
{
Q->rear=0; /*定义初始化队尾指针下标值*/
Q->front=0; /*定义初始化头指针下标值*/
Q->count=0; /*定义初始化计数器值*/
}
(2)非空否
QueueNotEmpty(SeqCQueue Q)
int QueueNotEmpty(SeqCQueue Q) /*判断顺序循环队列Q非空否,非空返回1,否则返回0*/
6、编写主程序调用上面的函数,加以测试。
数据输入与输出要求
输入示例:
输入要入队的元素个数:
8
10
0
输出示例:
41 67 34 0 69 24 78 58
41 67 34 0 69 24 78 58
62 64 5 45 81 27 61 91 95 42
62 64 5 45 81 27 61 91 95 42
int rear; /*队尾指针*/
int front; /*队头指针*/
int count; /*计数器*/
}SeqCQueue;
采用计数器法判断队列空和满的顺序循环队列的算法实现如下:
(1)初始化
QueueInitiate(SeqCQueue *Q)
void QueueInitiate(SeqCQueue *Q) /*初始化顺序循环队列Q*/
{
if(Q->count>0&&Q->rear==Q->front) /*判断队列满否*/
{
printf(“队列已满无法插入!\n”);
return 0;
}
else{
Q->queue[Q->rear]=x;
Q->rear=(Q->rear+1)%MaxQueueSize;
Q->count++;
return 1;
{
if(Q.cFra Baidu bibliotekunt==0)
{printf(“队列已空无数据元素可取!\n”);
return 0;
}
else {
*d=Q.queue[Q.front];
return 1;
}
}
调试情况
教师评阅
教师签字:日期:
return 0;
}
else {
*d=Q->queue[Q->front];
Q->front=(Q->front+1)%MaxQueueSize;
Q->count--;
return 1;
}
}
(5)取队头数据元素
QueueGet(SeqCQueue Q,DataType *d)
int QueueGet(SeqCQueue Q,DataType *d) /*取顺序循环队列Q的当前队头元素并赋给d,成功返回1,失败返回0*/
实验目的
1.熟悉并能实现顺序循环队列的定义和基本操作。
2.了解用队列解决实际应用问题。
实验要求
1、在给定的存储结构和空间大小的条件下,定义循环队列的初始化函数;
2、在少用一个单元的条件下定义队列的入队函数;
3、定义队列的出队函数;
4、定义判断队空函数;
5、定义销毁队列函数;
请按任意键继续. . .
数据结构设计
typedefstructSeqQueue
{
private:
int*base;/*初始化时动态分配空间*/
intrear , front;/*队头队尾指示器*/
intMaxsize;
}SeqQueue
voidSeqQueue(intsz );//初始化
boolEnQueue(inte);//入队
boolDeQueue (int&e);//出队
voidDestroyQueue( );//销毁队列
boolIsEmpty();//判断队空
voidMakeEmpty();
};
程序实现
3.顺序循环队列的实现
根据对顺序循环队列的分析,其结构体定义如下:
typedef struct {
DataType queue[MaxQueueSize];
}
}
(4)出队列
QueueDelete(SeqCQueue*Q,DataType *d)
int QueueDelete(SeqCQueue*Q,DataType *d) /*删除顺序循环队列Q的队头元素并赋给d,成功返回1,失败返回0*/
{
if(Q->count==0)
{ printf(“队列已空无数据元素出队列!\n”);
{
if(Q.count!=0)return 1;
else return 0;
}
(3)入队列
QueueAppend(SeqCQueue *Q,DataType x)
int QueueAppend(SeqCQueue *Q,DataType x) /*把数据元素值x插入顺序循环队列Q的队尾,成功返回1,失败则返回0*/
{
Q->rear=0; /*定义初始化队尾指针下标值*/
Q->front=0; /*定义初始化头指针下标值*/
Q->count=0; /*定义初始化计数器值*/
}
(2)非空否
QueueNotEmpty(SeqCQueue Q)
int QueueNotEmpty(SeqCQueue Q) /*判断顺序循环队列Q非空否,非空返回1,否则返回0*/
6、编写主程序调用上面的函数,加以测试。
数据输入与输出要求
输入示例:
输入要入队的元素个数:
8
10
0
输出示例:
41 67 34 0 69 24 78 58
41 67 34 0 69 24 78 58
62 64 5 45 81 27 61 91 95 42
62 64 5 45 81 27 61 91 95 42
int rear; /*队尾指针*/
int front; /*队头指针*/
int count; /*计数器*/
}SeqCQueue;
采用计数器法判断队列空和满的顺序循环队列的算法实现如下:
(1)初始化
QueueInitiate(SeqCQueue *Q)
void QueueInitiate(SeqCQueue *Q) /*初始化顺序循环队列Q*/
{
if(Q->count>0&&Q->rear==Q->front) /*判断队列满否*/
{
printf(“队列已满无法插入!\n”);
return 0;
}
else{
Q->queue[Q->rear]=x;
Q->rear=(Q->rear+1)%MaxQueueSize;
Q->count++;
return 1;
{
if(Q.cFra Baidu bibliotekunt==0)
{printf(“队列已空无数据元素可取!\n”);
return 0;
}
else {
*d=Q.queue[Q.front];
return 1;
}
}
调试情况
教师评阅
教师签字:日期:
return 0;
}
else {
*d=Q->queue[Q->front];
Q->front=(Q->front+1)%MaxQueueSize;
Q->count--;
return 1;
}
}
(5)取队头数据元素
QueueGet(SeqCQueue Q,DataType *d)
int QueueGet(SeqCQueue Q,DataType *d) /*取顺序循环队列Q的当前队头元素并赋给d,成功返回1,失败返回0*/