队列实验(链式结构)
用链式存储结构实现队列
头文件
#pragma once
struct Node {
int data;
Node* next;
};
class LinkQueue
{
public:
LinkQueue();
~LinkQueue();
void enQueue(int x);//入队
void deQueue();//出队
int getHead();//获取队头元素
bool empty();//判空
private:
Node* front, *rear;//队头队尾指针
};
源文件
#include "LinkQueue.h"
LinkQueue::LinkQueue() {
Node *s = new Node;//头结点
s->next = nullptr;
front = rear = s;//队头队尾指针均指向头结点
}
LinkQueue::~LinkQueue() {
Node* p = nullptr;//工作指针
while (p != nullptr) {
p = front->next;
delete front;
}
}
void LinkQueue::enQueue(int x) {
Node* s = new Node;//申请新结点
s->data = x;
s->next = nullptr;
rear->next = s;//结点入队
rear = s;
}
void LinkQueue::deQueue() {
Node* p = nullptr;
if (rear == front)throw"下溢";
p = front->next;//暂存队头元素
front->next = p->next;//队头元素摘链
if (p->next == nullptr)rear = front;//出队前队列长度为1
delete p;
}
int LinkQueue::getHead() {
return front->next->data;
}
bool LinkQueue::empty() {
if (front == rear)return true;
return false;
}
测试文件
#include<iostream>
using namespace std;
#include"LinkQueue.h"
int main() {
LinkQueue que;
cout <<"判断队列是否为空:"<< que.empty()<<endl;
//入队4个元素
que.enQueue(1);
que.enQueue(3);
que.enQueue(1);
que.enQueue(4);
cout << "取队首元素:" << que.getHead()<< endl;
//出队1个元素
que.deQueue();
cout << "再取一次队首元素:" << que.getHead() << endl;
cout << "再次判断栈是否为空:" << que.empty() << endl;
}