#include<iostream>
using namespace std;
typedef int DATA;
typedef struct Node
{
int data;
Node *next;
}Node;
class LinkRear
{
private:
Node *front, *rear;
int len;
public:
LinkRear();
~LinkRear();
void input(int x);
void output();
void print();
int getLen();
};
LinkRear::LinkRear(): len(0)
{
Node *s = new Node;
s->next = nullptr;
front = rear = s;
}
LinkRear::~LinkRear()
{
Node *p = this->front;
while (front != nullptr)
{
this->front = this->front->next;
delete p;
p = front;
}
}
void LinkRear::input(int x)
{
Node *s = new Node;
s->data = x;
s->next = this->rear->next;
this->rear->next = s;
this->rear = s;
}
void LinkRear::output()
{
if (front == rear)
{
throw("下溢!");
}
Node *p = this->front->next;
this->front->next = p->next;
cout << "出队的元素为:" << p->data << endl;
delete p;
}
void LinkRear::print()
{
Node *p = front->next;
if (p == nullptr)
{
throw("队列为空!");
}
cout << "队列元素分别为:";
while (p != nullptr)
{
cout << p->data << "\t";
p = p->next;
}
cout << endl;
}
int LinkRear::getLen()
{
Node *p = front->next;
while (p != nullptr)
{
p = p->next;
this->len++;
}
return this->len;
}
int main()
{
LinkRear r;
int data[] = { 23,45,3,7,6,945 };
cout << "操作菜单如下:" << endl;
cout << "======================" << endl
<< "1:入队 " << endl
<< "2:出队 " << endl
<< "3:打印队列 " << endl
<< "4:获取队列中元素个数 " << endl
<< "5:判断队空 " << endl
<< "6:判断队满 " << endl
<< "0:退出系统 " << endl
<< "======================" << endl
int i = 1, j, op, size;
while (i == 1)
{
cout << "请选择操作代码:";
cin >> op;
switch (op)
{
case 1:
cin >> j;
r.input(j);
break;
case 2:
try
{
r.output();
}
catch (char *err)
{
cerr << err << endl;
}
break;
case 3:
try
{
r.print();
}
catch (char *err)
{
cerr << err << endl;
}
break;
case 4:
cout << "当前队列长度为:";
size = r.getLen();
cout << size << endl;
break;
default:
exit(0);
break;
}
}
return 0;
}