循环队列的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四循环队列的基本操作
实验目的:
1、熟悉将算法转换成程序代码的过程。
2、了解单循环队列的逻辑结构特性,熟练掌握循环队列顺序存储结构的C 语言描述方法。
3、熟练掌握循环队列的基本操作:入队、出队等,掌握循环队列的存取特性。
实验内容:
1、分别建立包含6个数据元素的循环队列;
2、从键盘输入一个数据元素x,进行入队操作;
3、获取队头元素的值;
4、对循环队列进行出队操作;
5、打印循环队列元素和队列长度;
6、给出程序及各项操作结果。
实验步骤:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXSIZE 100 /*队列的最大容量*/
typedef int DataType;
typedef struct {
DataType data[MAXSIZE]; /*队列的存储空间*/
int front, rear; /*队头队尾指针*/
}SeqQueue,*PSeqQueue;
PSeqQueue Init_SeqQueue( )
{ /*初始化一新队列,入口参数:无,返回值:新顺序队列指针,null表示失败*/ PSeqQueue Q;
Q=( PSeqQueue )malloc(sizeof(SeqQueue));
if (Q)
{
Q->front=0;
Q->rear=0;
printf("置空队列成功!");
}
return Q;
}
void Destroy_SeqQueue(PSeqQueue *Q)
{ /*销毁一队列,入口参数:要销毁的顺序队列指针的地址,返回值:无*/ if (*Q)
free(*Q);
*Q=NULL;
}
int Empty_SeqQueue(PSeqQueue Q)
/*判断队列是否为空,入口参数:顺序队列,返回值:1表示为空,0表示非空*/
{ if (Q && Q->front==Q->rear)
return (1);
else
return (0);
}
int QueueLength (PSeqQueue Q)
{
学生自己写
}//返回Q的元素个数,即队列的长度
int In_SeqQueue ( PSeqQueue Q , DataType x)
/*入队操作,入口参数:顺序队列和待入队元素x ,返回值:1表示成功,-1表示队满溢出*/
{ if ((Q->rear+1)%MAXSIZE==Q->front)
{ printf("队满");
return -1; /*队满不能入队*/
}
else
{ Q->rear=(Q->rear+1) % MAXSIZE;
Q->data[Q->rear]=x;
return 1; /*入队完成*/
}
}
int Out_SeqQueue (PSeqQueue Q,DataType *x)
{ /*出队操作,入口参数:顺序队列,返回值:1表示成功,-1表示队空,出队的元素保存到*x */
if (Empty_SeqQueue(Q))
{
printf("队空");
return -1; /*队空不能出队*/
}
else
{ Q->front=(Q->front+1) % MAXSIZE;
*x=Q->data[Q->front];
return 1; /*出队完成*/
}
}
int Front_SeqQueue(PSeqQueue Q ,DataType *x)
{ /*取队头元素,入口参数:顺序队列和取出元素存放地址,返回值:1表示成功,-1表示队空*/
if (Q->front==Q->rear)
{
printf("队空");
return -1; /*队空不能得到队头元素*/
}
else
{ *x=Q->data[(Q->front+1)%MAXSIZE];
return 1; /*取队头元素操作完成*/
}
}
void display(PSeqQueue S)
{
学生填写
}
void main()
{
(由学生填写)
}
实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)。