循环数组实现的简单队列数据结构与函数

需积分: 10 3 下载量 158 浏览量 更新于2024-09-09 收藏 51KB DOCX 举报
本资源是一份基于哈工大软件设计课程中的循环数组实现队列的代码示例。循环数组作为一种特殊的线性数据结构,被用来构建队列,它具有先进先出(First In First Out, FIFO)的特点。队列只允许在队尾进行插入(EnQueue)操作,在队头进行删除(DeQueue)操作,这与栈(Last In First Out, LIFO)的操作方式相反。 循环数组存储结构的特点在于,当队列元素达到最大容量(Max)时,新的元素会从数组的第一个位置开始插入,从而实现了“循环”的效果,避免了普通数组在满时需要扩展的开销。队列的存储结构包含一个指向数组起始位置的指针q->head(队头),以及一个指向下一个可用位置的指针q->rear(队尾)。当队列为空(q->rear == q->head)或已满((q->rear+1)%Max == q->head)时,可以分别通过IsEmpty()和IsFull()函数判断。 类MyQueue包含以下几个关键成员函数: 1. 构造函数MyQueue(): 它创建一个新的循环数组队列实例,分配固定大小的数组并初始化队列头和队尾指针。 2. 析构函数~MyQueue(): 释放动态内存,确保队列对象的正确销毁。 3. MakeNull(): 将队列置空,将头和尾指针都设置为0。 4. IsEmpty(): 检查队列是否为空,返回布尔值。 5. IsFull(): 检查队列是否已满,返回布尔值。 6. EnQueue(T t): 当队列未满时,将元素t插入队尾,并更新队尾指针。 7. DeQueue(): 如果队列非空,从队头删除元素,更新队头指针,并返回删除的元素。如果队列为空,输出提示信息并返回NULL。 8. lengthq(): 返回队列中实际元素的数量,通过取模运算处理循环数组的情况。 可运行程序展示了如何使用这些函数来创建、操作和检查循环数组队列。通过这个简单的实现,学习者可以理解循环数组在实现队列中的应用,并用于实际问题的编程中。这份代码可供参考,但可能需要根据实际需求进行优化和改进。