C++编程练习(2)——数据结构 之 链式队列 的实现

数据结构 之 链式队列 的实现

使用工具:VS2019

功能:

1、实现链式队列的基本功能
2、使用面向对象的思想完成

软件下载:

点击进入CSDN的下载界面


一、代码部分

头文件MyQueue.h:

#pragma once
#include <iostream>
using namespace std;

class MyQueue
{
    
    
public:
	virtual ~MyQueue() {
    
    };
	// 判断队列是否为空
	virtual bool QueueEmpty() const = 0;
	// 查看队列长度
	virtual int QueueSize() const = 0;
	// 获取队列中队头元素
	virtual int& QueueFrontElement() = 0;
	// 队列入队
	virtual void QueuePush(const int& element) = 0;
	// 队列出队
	virtual void QueuePop() = 0;
	// 展示队列中的元素
	virtual void QueueShow() = 0;
};

struct MyNode
{
    
    
	int data;
	MyNode* next;
	MyNode(int data = -1, MyNode* next = nullptr) :data(data), next(next) {
    
    }
};

class MyListQueue :public MyQueue
{
    
    
public:
	MyListQueue(MyNode* queueFront = nullptr, MyNode* queueBack = nullptr, int queueSize = 0);
	~MyListQueue();

	// 判断队列是否为空
	bool QueueEmpty() const;
	// 查看队列长度
	int QueueSize() const;
	// 获取队列中队头元素
	int& QueueFrontElement();
	// 队列入队
	void QueuePush(const int& element);
	// 队列出队
	void QueuePop();
	// 展示队列中的元素
	void QueueShow();
private:
	MyNode* queueFront;
	MyNode* queueBack;
	int queueSize;
};

MyQueue.c:

#include "MyQueue.h"

// 参数列表初始化
MyListQueue::MyListQueue(MyNode* queueFront, MyNode* queueBack, int queueSize) :
	queueFront(queueFront), queueBack(queueBack), queueSize(queueSize)
{
    
    
}
// 析构函数
MyListQueue::~MyListQueue()
{
    
    
	delete queueFront;
	delete queueBack;
	queueSize = 0;
}

bool MyListQueue::QueueEmpty() const
{
    
    
	return queueSize == 0;
}

int MyListQueue::QueueSize() const
{
    
    
	return queueSize;
}

int& MyListQueue::QueueFrontElement()
{
    
    
	if (!QueueEmpty())
	{
    
    
		return queueFront->data;
	}
	else
	{
    
    
		cout << "队列为空,无法获取队头元素" << endl;
		exit(0);
	}
}

void MyListQueue::QueuePush(const int& element)
{
    
    
	MyNode* newNode = new MyNode(element);

	if (QueueEmpty())
	{
    
    
		queueFront = newNode;
	}
	else
	{
    
    
		queueBack->next = newNode;
	}
	queueBack = newNode;
	queueSize++;
}

void MyListQueue::QueuePop()
{
    
    
	if (!QueueEmpty())
	{
    
    
		MyNode* queueFrontNext = queueFront->next;
		delete queueFront;
		queueFront = queueFrontNext;
		queueSize--;
	}
	else
	{
    
    
		cout << "队列为空,无法出队" << endl << endl;
		exit(0);
	}

}

void MyListQueue::QueueShow()
{
    
    
	if (!QueueEmpty())
	{
    
    
		MyNode* pMove = queueFront;
		while (pMove)
		{
    
    
			cout << pMove->data << "\t";
			pMove = pMove->next;
		}
		cout << endl << endl;
	}
	else
	{
    
    
		cout << "队列为空,无法输出" << endl << endl;
		exit(0);
	}
}

main.c:

#include "MyQueue.h"

/*
*	@author	:	LZY
* 	@date	:	2021/3/30 12:28:06
*	@theme	:	链式队列的功能实现
*/

void MainMenu();

int main()
{
    
    
	int choice = -1;
	int data = -1;
	MyQueue* pListQueue = new MyListQueue;

	while (true)
	{
    
    
		MainMenu();
		cout << "选择功能:";
		cin >> choice;
		switch (choice)
		{
    
    
		case 1:
			cout << "输入要入队的元素:";
			cin >> data;
			pListQueue->QueuePush(data);
			cout << "入队成功" << endl << endl;
			break;
		case 2:
			pListQueue->QueuePop();
			cout << "出队成功" << endl << endl;
			break;
		case 3:
			cout << pListQueue->QueueFrontElement() << endl << endl;
			break;
		case 4:
			cout << boolalpha << "队列是否为空:" << pListQueue->QueueEmpty() << endl << endl;
			break;
		case 5:
			cout << "队列大小:" << pListQueue->QueueSize() << endl << endl;
			break;
		case 6:
			pListQueue->QueueShow();
			break;
		default:
			break;
		}
		system("pause");
		system("cls");
	}

	return 0;
}

void MainMenu()
{
    
    
	cout << "*---------链式队列---------*" << endl;
	cout << "|                          |" << endl;
	cout << "|          1.入队          |" << endl;
	cout << "|          2.出队          |" << endl;
	cout << "|          3.队头          |" << endl;
	cout << "|          4.队空          |" << endl;
	cout << "|          5.大小          |" << endl;
	cout << "|          6.展示          |" << endl;
	cout << "|                          |" << endl;
	cout << "*--------------------------*" << endl;

}

二、运行结果

1.入队(首先入栈三个数据:100、200、300)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.展示链式队列中的数据

在这里插入图片描述

3.此时队列中的大小为多少?

在这里插入图片描述

4.查看队头元素

在这里插入图片描述

5.此时查看链式队列是否为空,若队列为空,输出true

在这里插入图片描述

6.出个队试一下

在这里插入图片描述

7.出队完成,展示当前队中的数据

在这里插入图片描述

8.此时队列的大小为?

在这里插入图片描述

三、最终总结

实现了想要实现的功能。

猜你喜欢

转载自blog.csdn.net/weixin_44739914/article/details/115323185