C++利用链表模板类实现简易队列

本文实例为大家分享了C++利用链表模板类实现一个队列的具体代码,供大家参考,具体内容如下

设计思想:MyQueue.h中对模板类进行声明和实现。首先定义结点的结构体,包含数据和指针域两部分。队列类定义中声明和实现了元素入队,出队,打印队首元素和队列等方法。

注意:

1)模板类的声明和定义不能分开(即不能分别放在.h和.cpp文件里)。

2)声明新节点时,如果声明的节点是辅助操作的,可以不用new关键字,例如在析构函数中,直接用:Node<T>* temp;定义即可。如果声明一个新节点加入队列,则要用new关键字,否则会报出nullptr异常。

​ConsoleApplication.cpp

#include "stdafx.h"

#include "MyQueue.h"

int main()

{

MyQueue<int>myq ;

int a[] = { 3,59,21,54,7 };

for (int i = 0; i < 5; i++) {

myq.push(a[i]);

}

myq.outPrint();// 打印队列

myq.top();//弹出队首元素

myq.pop();//打印队首元素

myq.top();

myq.getCount();//获取队列元素数量

myq.top();

myq.top();

myq.outPrint();

myq.top();

myq.top();

myq.pop();

return 0;

}

MyQueue.h

#include <iostream>

using namespace std;

template<class T>

struct Node{

T data;

Node<T> * next;

};

template<class T>

class MyQueue{

private:

Node<T>* head;//头指针

int count;//队列元素数量

public:

MyQueue();

~MyQueue();

void outPrint();//打印队列元素

void push(const T &e);//元素入队

void top();// 返回队首元素

void pop();//弹出队首元素

int getCount();

};

template <class T>

MyQueue<T>::MyQueue(){

count = 0;

head = nullptr;

}

template <class T>

MyQueue<T>::~MyQueue(){

if (head == nullptr) {

cout << "已为空队列"<< endl;

}

else {

Node<T> *temp;

while (head!= nullptr) {

temp = head;

head = head->next;

delete temp;

count -= 1;

}

cout << "析构函数已完成"<< endl;

cout << "队列元素个数为" << count << endl;

}

}

template<class T>

int MyQueue<T>::getCount(){

cout << "队列元素个数为: "<<count<< endl;

return count;

}

template<class T>

void MyQueue<T>::push(const T&e) {//元素从链表头入队列

if (e <=0) {

cout << "请输入正数值" << endl;

return;

}

if (count == 0) {

Node<T>*node = new Node<T>;//此处留意,声明新节点,不使用new初始化会报错

node->data = e;

node->next = nullptr;

head = node;

}

else {

Node<T>* temp = head;

for (int i = 0; i < count - 1;i++) {

temp = temp->next;

}

Node<T>* node=new Node<T>;

temp->next=node;

node->data = e;

node->next = nullptr;

}

count++;//队列元素数量加1

}

template <class T>

void MyQueue<T>::outPrint() {

if (head == nullptr) {

cout << "空队列" << endl;

}

else {

Node<T>* temp=head;

cout << "队列元素为:";

while (temp!=nullptr) {

cout << temp->data<<" ";

temp = temp->next;

}

cout << endl;

}

}

template <class T>

void MyQueue<T>::top() {

if (head == nullptr) {

cout << "这是空队列,无队首元素。"<< endl;

}

else {

Node<T>* temp;

temp = head;

head = head->next;

cout << "弹出队首元素:" <<temp->data<< endl;

delete temp;

count -= 1;

}

}

template <class T>

void MyQueue<T>::pop() {

if (head == nullptr) {

cout << "此为空队列,无队首元素。" << endl;

return;

}

else {

cout << "队首元素为:" << head->data << endl;

}

}

运行结果:

以上是 C++利用链表模板类实现简易队列 的全部内容, 来源链接: utcz.com/z/312860.html

回到顶部