typedef int ElemType;
//循环队列类 队尾入队 队顶出队 先进先出
//进队尾指针+1 出队头指针+1
//头指针位置始终是空的,进队时头指针位置不变,出队时尾指针位置不变。
class SeQueue
{
private:
ElemType *elem;
int front, rear;
public:
int MAXSIZE;
SeQueue(int LengthInput) //初始化空队列
{
elem = new ElemType[LengthInput] ;
MAXSIZE = LengthInput;
front = 0;
rear = 0;
}
~SeQueue() {};
int Empty(); //判断是否为空
void Display(); //输出队列
void AddQ(ElemType x); //入队
ElemType DelQ(); //出队
ElemType GetFront(); //取队顶值
}
//判断队空
int SeQueue::Empty()
{
if (rear == front)
return 1;
else
return 0;
}
//返回队顶值
ElemType SeQueue::GetFront()
{
ElemType x;
if (front == rear)
{
cout << "\n Queu is Empty" << endl;
x = -1;
}
else
x = elem[(front + 1) % MAXSIZE];
return x;
}
//输出队列
void SeQueue::Display()
{
//头指针的位置上没有元素 i从front+1开始 循环条件是当前位置不等于尾指针+1的取余 循环增加i 当i== (rear+1) % MAXSIZE时可以理解为已经循环读取队列所包含的元素 一遍了
for (int i = (front+1) % MAXSIZE;i!= (rear+1) % MAXSIZE; i=(i+1)%MAXSIZE)
{
cout <<"队内元素:" <<elem[i] << endl;
}
}
//入队
void SeQueue::AddQ(ElemType x)
{
if ((rear + 1) % MAXSIZE == front)
cout << "\n Queue is Full" << endl;
else
{
rear = (rear + 1) % MAXSIZE; //front不变 rear+1
elem[rear] = x;
}
}
//出队
ElemType SeQueue::DelQ()
{
if (rear == front)
{
cout << "\n 队空" << endl;
return -1 ;
}
else
{
cout << "\n 删除队顶元素" << endl;
front = (front + 1) % MAXSIZE;
} return elem[front];
}
int main()
{
ElemType e;
int j;
cout << "队列大小"; cin >> j;
SeQueue Q(j);
//拥有MAXSIZE个数组元素的数组仅能表示一个长度为MAXSIZE-1的循环队列 头指针的位置没有元素
for(int k = 0;k< Q.MAXSIZE-1;k++)
{
cout << "\n 队列顺序储存结构演示";
cout << "进队 data = "; cin >> e;
Q.AddQ(e);
}
Q.Display();
e = Q.DelQ();
Q.Display();
std::cout << "Hello Worl
}