c++实现链式队列

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值