#pragma once
#include<iostream>
using namespace std;typedef int QDataType;
class Queue
{
private:
class QNode
{
public:
QDataType data;
QNode* next;
};
QNode* head;
QNode* tail;
public:
void QueueInit();//初始化
void QueueDstroy();//销毁队列
void QueuePush(QDataType x);//入队列
void QueuePop();//出队列
QDataType QueueFront();//获取对头数据
QDataType QueueBack();//获取队尾数据
int QueueSize();//队列的元素个数
bool QueueEmpty();//判断队列是否为空
};
#include"Queue.h"
void Queue::QueueInit()
{
head = tail = nullptr;
}void Queue::QueueDstroy()//销毁队列
{
if (head == nullptr)
{
return;
}QNode* cur = head;
while (cur)
{
QNode* next = cur->next;
delete cur;
cur = next;
}
head = tail = nullptr;
}void Queue::QueuePush(QDataType x)//入队列
{
QNode* newnode = new QNode;//开辟新结点
newnode->data = x;
newnode->next = nullptr;if (tail == NULL)
{
head = tail = newnode;
}
else
{tail->next = newnode;
tail = newnode;
}
}void Queue::QueuePop()//出队列
{
if (head == nullptr)
{
return;
}
if (head->next == nullptr)
{
delete head;
head = tail = NULL;
}
else
{
QNode* next = head->next;
delete head;
head = next;
}
}QDataType Queue::QueueFront()//获取对头数据
{
if (head == nullptr)
{
cout << "队列为空" << endl;
return NULL;
}
return head->data;
}QDataType Queue::QueueBack()//获取队尾数据
{
if (head == nullptr)
{
cout << "队列为空" << endl;
return NULL;
}return tail->data;
}int Queue::QueueSize()//队列的元素个数
{
int size = 0;
QNode* cur = head;
while (cur)
{
size++;
cur = cur->next;
}
return size;
}bool Queue::QueueEmpty()//判断队列是否为空
{
return head == nullptr;
}
#include"Queue.h"
void test01()
{
Queue q;
q.QueueInit();
q.QueuePush(1);
q.QueuePush(2);
q.QueuePush(3);
q.QueuePush(4);
q.QueuePush(4);cout << q.QueueSize() << endl;
q.QueuePop();
cout << q.QueueBack() << endl;while (!q.QueueEmpty())
{
cout << q.QueueFront() << " ";
q.QueuePop();
}
cout << endl;
cout << q.QueueFront() << endl;q.QueueDstroy();
}
int main()
{
test01();
}