数据结构实验操作四 (队列的操作)
一、实验目的
1.掌握队列存储结构的表示和实现方法。
2.掌握队列的入队和出队等基本操作的算法实现。
3.了解队列在解决实际问题中的简单应用。
二、实验内容
1.建立顺序循环队列,并在顺序循环队列上实现入队、出队基本操作(验证性内容)。
2.建立循环链队列,并在循环链队列上实现入队、出队基本操作(设计性内容)。
3.实现键盘输入循环缓冲区问题(应用性设计内容)。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
Windows环境下的VC++等
四、知识准备
前期要求熟练掌握了C语言的编程规则、方法和顺序循环队列、循环链队列的基本操作算法。
五、验证性实验
1.实验要求
编程实现如下功能:
(1)根据输入的队列长度n和各元素值建立一个循环顺序表表示的队列(循环队列),并输出队列中各元素值。
(2)将数据元素e入队,并输出入队后的队列中各元素值。
(3)将循环队列的队首元素出队,并输出出队元素的值和出队后队列中各元素值。
2. 实验相关原理:
队列是一种插入操作限制在表尾,而删除操作限制在表头进行的特殊线性表,它的操作具有“先进先出”的特性。采用顺序存储结构的队列称为顺序队列,顺序队列的存储结构描述如下:
#define MAXQSIZE 100/*顺序循环队列的最大长度*/
typedef struct
{
Qelemtype base[MAXQSIZE]; /*存放队列元素的数组空间*/
int front; /*头指针,若队列不空,则指向队列头元素*/
int rear; /*尾指针,若队列不空,则指向队列尾元素的下一个存储单元*/
}Sqqueue;
【核心算法提示】
1.顺序循环队列入队操作的基本步骤:首先判断队列是否为满,如果队列满,则函数返回ERROR,否则将待入队的数据元素e存放在尾指针rear所指示的存储单元中,再使尾指针沿着顺序循环存储空间后移一个位置,最后函数返回OK。
2.顺序循环队列出队操作的基本步骤:首先判断队列是否为空,如果队列空,则函数返回ERROR,否则将头指针所指示的队首元素用e返回其值,再使头指针沿着顺序循环存储空间后移一个位置,最后函数返回OK。
【核心算法描述】
status enqueue(Sqqueue &Q,Qelemtype e)
/*在循环队列Q中,插入新元素使其成为队尾元素*/
{
if ((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;