//该程序为了判断严蔚敏《数据结构》P63的“C语言不能用动态分配的一维数组来实现循环队列” 的正确与否
//结果证明:可以用动态分配来实现循环队列,而且可以在队列空间不够的时候扩大循环队列的空间
//分割线:---------------------------------------------------
//做题时,发现循环队列不能像顺序栈一样扩大空间,之前的认识是错误的,书中说法是正确的
//原因如下:
//循环队列的空间是由base开辟的,扩大也是由base扩大的,
//扩大后会在对于base的最后的位置开辟,而不总是tail的后面
//若head遍历到tail的过程中不经过新开辟的空间,正确
//原因:tail+1(即tail向后移),新的tail会指向新开辟的空间
//但若head遍历到tail的过程中经过了新开辟的空间,就会出现错误
//原因:“扩大”后tail+1(即tail向后移),新的tail根本就没指在新开辟的空间上
//而会与head重合,导致Output()无任何输出
//结论:循环队列不要再扩大空间,你可以初始化的时候把空间弄大些
#include<iostream>
using namespace std;
#define QElemType double
const int InitQueueSize=3;
const int QueueIncrement=2;
typedef struct
{
QElemType* base;
int QueueSize;
int head,tail;
}SqQueue;
bool Init_Queue(SqQueue& Q)//初始化循环队列
{
Q.base=new QElemType[InitQueueSize];
if(!Q.base) exit