#include"pch.h"
#include<iostream>
using namespace std;
typedef int QElemType;
typedef struct QNode {
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
bool InitQueue(LinkQueue &Q) {
Q.front = Q.rear = new QNode;
Q.front->next = NULL;
return true;
}
bool EnQueue(LinkQueue &Q, QElemType e) {
QNode * p = new QNode;
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return true;
}
QElemType GetHead(LinkQueue Q) {
if (Q.front != Q.rear) {
return Q.front->next->data;
}
}
bool DeQueue(LinkQueue & Q,QElemType & e) {
if (Q.front == Q.rear) return false;
QNode * p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p) {
Q.rear = Q.front;
}
delete p;
return true;
}
void GetAll(LinkQueue Q){
if (Q.rear == Q.front) cout << "栈空,遍历失败" << endl;
QueuePtr p = Q.front->next;
int time = 0;
while (p) {
++time;
cout << p->data << " ";
p = p->next;
}
cout << "总共有" << time << "个元素" << endl;
}
bool DestroyQueue(LinkQueue &Q) {
while (Q.front) {
Q.rear = Q.front->next;
delete Q.front;
Q.front = Q.rear;
}
return true;
}
bool ClearQueue(LinkQueue &Q) {
QueuePtr q, p;
p = Q.front->next;
Q.front->next = NULL;
while (p) {
q = p->next;
delete p;
p = q;
}
Q.rear = Q.front;
return true;
}
int main() {
LinkQueue S; QElemType e;
if (InitQueue(S))cout << "Succeed" << endl;
else cout << "Failed" << endl;
cout << "input e:\t";
while (cin >> e) {
EnQueue(S, e);
cout << "input e:\t";
}
cout << "栈顶元素为" << GetHead(S) << endl;
cout << "栈所有元素为" << endl;
GetAll(S);
if(DeQueue(S, e))
cout << "移除栈顶的元素是" << e<<endl;
else cout << "栈空" << endl;
cout << "栈剩下所有元素为" << endl;
GetAll(S);
ClearQueue(S);
cout << "清零后,栈剩下所有元素为" << endl;
GetAll(S);
DestroyQueue(S);
cout << "销毁后,栈剩下所有元素为" << endl;
GetAll(S);
}