函数题:循环队列合并【有题解视频】
循环队列合并:建立循环队列时,使用少用一个存储空间来区分队列的队空和队满。现有两个循环队列Q1,Q2,当Q1,Q2的元素数量之和小于循环队列的最大长度时,队列Q2依次出队,且Q2每个元素出队后依次入队Q1。当队列Q2为空时,求队列Q1。
### 函数接口定义:
c,c++
在这里描述函数接口。例如:
int InitQueue(SqQueue *Q); /* 初始化循环队列 */
int QueueEmpty(SqQueue Q); /* 判断循环队列是否为空 */
int EnQueue(SqQueue *Q,DataType e); /* 入队 */
int DeQueue(SqQueue *Q,DataType *e); /* 出队 */
int TraverseQueue(SqQueue Q); /* 遍历队列 */
int MergeQueue(SqQueue *Q1,SqQueue *Q2); /* 合并队列 */
在这里解释接口参数。例如:其中 Q1 和 Q2 表示循环队列
### 裁判测试程序样例:
c++
在这里给出函数被调用进行测试的例子。例如:
#include"stdio.h"
#define QUEUESIZE 10
typedef int DataType;
typedef struct{
DataType items[QUEUESIZE];
int front,rear;
}SqQueue;
int InitQueue(SqQueue *Q); /* 细节在此不表 */
int QueueEmpty(SqQueue Q); /*细节在此不表 */
int EnQueue(SqQueue *Q,DataType e); /* 细节在此不表 */
int DeQueue(SqQueue *Q,DataType *e); /* 细节在此不表 */
int TraverseQueue(SqQueue Q); /* 细节在此不表 */
int MergeQueue(SqQueue *Q1,SqQueue *Q2); /* 合并队列 */
int main()
{
int i,input,result;
SqQueue Q1,Q2; //定义顺序表
InitQueue(&Q1);//初始化建空表
InitQueue(&Q2);
for(i=0;;i++)
{
scanf("%d",&input);
if(input==-1)break;
EnQueue(&Q1,input);//插入数据
}
for(i=0;;i++)
{
scanf("%d",&input);
if(input==-1)break;
EnQueue(&Q2,input);//插入数据
}
result=MergeQueue(&Q1,&Q2);
if(result>0) TraverseQueue(Q1);//遍历
return 0;
}
/* 请在这里填写答案 */
### 输入样例:
在这里给出一组输入, -1表示输入结束。例如:
in
1 2 3 4 5 -1
6 7 -1
### 输出样例:
在这里给出相应的输出。例如:
out
1 2 3 4 5 6 7
答案:若无答案欢迎评论
#写在前面的话#
*提供题解视频,是为了帮助大家掌握算法的思想,在今后的编程、考试、面试中,换了语言,换了编译器,换了开发平台,都能重现这种思想,从而编写出任意语言任意编译器任意开发平台下面的这种算法的代码来,所以对于一打开题解报告,就直接拖到视频最后看参考代码的做法,我们非常不赞同,也不符合我们制作PPT录制讲解视频的初衷,希望大家体谅我们的苦心。*
https://www.bilibili.com/video/BV11Y4y1s7f6/

### 函数接口定义:
c,c++
在这里描述函数接口。例如:
int InitQueue(SqQueue *Q); /* 初始化循环队列 */
int QueueEmpty(SqQueue Q); /* 判断循环队列是否为空 */
int EnQueue(SqQueue *Q,DataType e); /* 入队 */
int DeQueue(SqQueue *Q,DataType *e); /* 出队 */
int TraverseQueue(SqQueue Q); /* 遍历队列 */
int MergeQueue(SqQueue *Q1,SqQueue *Q2); /* 合并队列 */
在这里解释接口参数。例如:其中 Q1 和 Q2 表示循环队列
### 裁判测试程序样例:
c++
在这里给出函数被调用进行测试的例子。例如:
#include"stdio.h"
#define QUEUESIZE 10
typedef int DataType;
typedef struct{
DataType items[QUEUESIZE];
int front,rear;
}SqQueue;
int InitQueue(SqQueue *Q); /* 细节在此不表 */
int QueueEmpty(SqQueue Q); /*细节在此不表 */
int EnQueue(SqQueue *Q,DataType e); /* 细节在此不表 */
int DeQueue(SqQueue *Q,DataType *e); /* 细节在此不表 */
int TraverseQueue(SqQueue Q); /* 细节在此不表 */
int MergeQueue(SqQueue *Q1,SqQueue *Q2); /* 合并队列 */
int main()
{
int i,input,result;
SqQueue Q1,Q2; //定义顺序表
InitQueue(&Q1);//初始化建空表
InitQueue(&Q2);
for(i=0;;i++)
{
scanf("%d",&input);
if(input==-1)break;
EnQueue(&Q1,input);//插入数据
}
for(i=0;;i++)
{
scanf("%d",&input);
if(input==-1)break;
EnQueue(&Q2,input);//插入数据
}
result=MergeQueue(&Q1,&Q2);
if(result>0) TraverseQueue(Q1);//遍历
return 0;
}
/* 请在这里填写答案 */
### 输入样例:
在这里给出一组输入, -1表示输入结束。例如:
in
1 2 3 4 5 -1
6 7 -1
### 输出样例:
在这里给出相应的输出。例如:
out
1 2 3 4 5 6 7
答案:若无答案欢迎评论
#写在前面的话#
*提供题解视频,是为了帮助大家掌握算法的思想,在今后的编程、考试、面试中,换了语言,换了编译器,换了开发平台,都能重现这种思想,从而编写出任意语言任意编译器任意开发平台下面的这种算法的代码来,所以对于一打开题解报告,就直接拖到视频最后看参考代码的做法,我们非常不赞同,也不符合我们制作PPT录制讲解视频的初衷,希望大家体谅我们的苦心。*
https://www.bilibili.com/video/BV11Y4y1s7f6/
