C++利用鏈表模板類實(shí)現(xiàn)簡(jiǎn)易隊(duì)列
本文實(shí)例為大家分享了C++利用鏈表模板類實(shí)現(xiàn)一個(gè)隊(duì)列的具體代碼,供大家參考,具體內(nèi)容如下
設(shè)計(jì)思想:MyQueue.h中對(duì)模板類進(jìn)行聲明和實(shí)現(xiàn)。首先定義結(jié)點(diǎn)的結(jié)構(gòu)體,包含數(shù)據(jù)和指針域兩部分。隊(duì)列類定義中聲明和實(shí)現(xiàn)了元素入隊(duì),出隊(duì),打印隊(duì)首元素和隊(duì)列等方法。
注意:
1)模板類的聲明和定義不能分開(kāi)(即不能分別放在.h和.cpp文件里)。
2)聲明新節(jié)點(diǎn)時(shí),如果聲明的節(jié)點(diǎn)是輔助操作的,可以不用new關(guān)鍵字,例如在析構(gòu)函數(shù)中,直接用:Node<T>* temp;定義即可。如果聲明一個(gè)新節(jié)點(diǎn)加入隊(duì)列,則要用new關(guān)鍵字,否則會(huì)報(bào)出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();// 打印隊(duì)列
myq.top();//彈出隊(duì)首元素
myq.pop();//打印隊(duì)首元素
myq.top();
myq.getCount();//獲取隊(duì)列元素?cái)?shù)量
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;//隊(duì)列元素?cái)?shù)量
public:
MyQueue();
~MyQueue();
void outPrint();//打印隊(duì)列元素
void push(const T &e);//元素入隊(duì)
void top();// 返回隊(duì)首元素
void pop();//彈出隊(duì)首元素
int getCount();
};
template <class T>
MyQueue<T>::MyQueue(){
count = 0;
head = nullptr;
}
template <class T>
MyQueue<T>::~MyQueue(){
if (head == nullptr) {
cout << "已為空隊(duì)列"<< endl;
}
else {
Node<T> *temp;
while (head!= nullptr) {
temp = head;
head = head->next;
delete temp;
count -= 1;
}
cout << "析構(gòu)函數(shù)已完成"<< endl;
cout << "隊(duì)列元素個(gè)數(shù)為" << count << endl;
}
}
template<class T>
int MyQueue<T>::getCount(){
cout << "隊(duì)列元素個(gè)數(shù)為: "<<count<< endl;
return count;
}
template<class T>
void MyQueue<T>::push(const T&e) {//元素從鏈表頭入隊(duì)列
if (e <=0) {
cout << "請(qǐng)輸入正數(shù)值" << endl;
return;
}
if (count == 0) {
Node<T>*node = new Node<T>;//此處留意,聲明新節(jié)點(diǎn),不使用new初始化會(huì)報(bào)錯(cuò)
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++;//隊(duì)列元素?cái)?shù)量加1
}
template <class T>
void MyQueue<T>::outPrint() {
if (head == nullptr) {
cout << "空隊(duì)列" << endl;
}
else {
Node<T>* temp=head;
cout << "隊(duì)列元素為:";
while (temp!=nullptr) {
cout << temp->data<<" ";
temp = temp->next;
}
cout << endl;
}
}
template <class T>
void MyQueue<T>::top() {
if (head == nullptr) {
cout << "這是空隊(duì)列,無(wú)隊(duì)首元素。"<< endl;
}
else {
Node<T>* temp;
temp = head;
head = head->next;
cout << "彈出隊(duì)首元素:" <<temp->data<< endl;
delete temp;
count -= 1;
}
}
template <class T>
void MyQueue<T>::pop() {
if (head == nullptr) {
cout << "此為空隊(duì)列,無(wú)隊(duì)首元素。" << endl;
return;
}
else {
cout << "隊(duì)首元素為:" << head->data << endl;
}
}
運(yùn)行結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c++實(shí)現(xiàn)對(duì)輸入數(shù)組進(jìn)行快速排序的示例(推薦)
下面小編就為大家?guī)?lái)一篇c++實(shí)現(xiàn)對(duì)輸入數(shù)組進(jìn)行快速排序的示例(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
詳解計(jì)數(shù)排序算法及C語(yǔ)言程序中的實(shí)現(xiàn)
技術(shù)排序算法與我們普通接觸的冒泡排序和快速排序等基于元素比較的算法不同,在編程中通過(guò)C語(yǔ)言的數(shù)組能夠清除地表達(dá)出來(lái),這里我們就來(lái)詳解計(jì)數(shù)排序算法及C語(yǔ)言程序中的實(shí)現(xiàn)2016-07-07
c語(yǔ)言獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼(windows/linux)
這篇文章主要介紹了c語(yǔ)言獲取當(dāng)前工作路徑的實(shí)現(xiàn)代碼(windows/linux),需要的朋友可以參考下2017-09-09
C語(yǔ)言實(shí)現(xiàn)繪制南丁格爾玫瑰圖的示例代碼
玫瑰圖中有一種不等半徑的統(tǒng)計(jì)圖稱為南丁格爾玫瑰圖,網(wǎng)上很熱門(mén),是一很有藝術(shù)感的漂亮的統(tǒng)計(jì)圖,下面我們就來(lái)看看如何使用C語(yǔ)言繪制它吧2024-03-03
簡(jiǎn)單談?wù)凜++ 頭文件系列之(iosfwd)
本文給大家分享的是小編關(guān)于頭文件系列的(iosfwd)的簡(jiǎn)單講解,所謂iosfwd,其實(shí)就是“input output stream forward”,下面我們來(lái)詳細(xì)看看2017-02-02
Cocos2d-x中CCEditBox文本輸入框的使用實(shí)例
這篇文章主要介紹了Cocos2d-x中CCEditBox文本輸入框的使用實(shí)例,本文在代碼中用大量注釋講解了CCEditBox的使用方法,需要的朋友可以參考下2014-09-09
C++實(shí)現(xiàn)掃雷程序開(kāi)發(fā)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)掃雷程序開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
C++實(shí)現(xiàn)LeetCode(67.二進(jìn)制數(shù)相加)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(67.二進(jìn)制數(shù)相加),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++入門(mén)概覽和嘗試創(chuàng)建第一個(gè)C++程序
這篇文章主要介紹了C++入門(mén)概覽和嘗試創(chuàng)建第一個(gè)C++程序,同時(shí)也包括編寫(xiě)類的示例展示C++面向?qū)ο蟮奶匦?需要的朋友可以參考下2015-09-09

