数据结构 之 链式队列 的实现
使用工具:VS2019
功能:
1、实现链式队列的基本功能
2、使用面向对象的思想完成
软件下载:
目录
一、代码部分
头文件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.此时队列的大小为?
三、最终总结
实现了想要实现的功能。