#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;
}
c++实现链式队列
最新推荐文章于 2022-03-30 13:50:17 发布
467

被折叠的 条评论
为什么被折叠?



