用C++實(shí)現(xiàn)隊(duì)列的程序代碼
// MyQueue.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//實(shí)現(xiàn)鏈?zhǔn)疥?duì)列(queue),包括一個(gè)頭結(jié)點(diǎn)。隊(duì)列操作包括在隊(duì)頭出隊(duì)(pop)、在隊(duì)尾入隊(duì)(push)、
//取得隊(duì)頭元素(front_element)、取得隊(duì)尾元素(back_element)、隊(duì)列元素個(gè)數(shù)(size)、
//隊(duì)列是否為空(empty)。
#include "stdafx.h"
#include <iostream>
using namespace std;
//定義隊(duì)列的節(jié)點(diǎn)結(jié)構(gòu)
template <class T>
struct NODE
{
NODE<T>* next;
T data;
};
template <class T>
class MyQueue
{
public:
MyQueue()
{
NODE<T>* p = new NODE<T>;
if (NULL == p)
{
cout << "Failed to malloc the node." << endl;
}
p->data = NULL;
p->next = NULL;
front = p;
rear = p;
}
//在隊(duì)尾入隊(duì)
void push(T e)
{
NODE<T>* p = new NODE<T>;
if (NULL == p)
{
cout << "Failed to malloc the node." << endl;
}
p->data = e;
p->next = NULL;
rear->next = p;
rear = p;
}
//在隊(duì)頭出隊(duì)
T pop()
{
T e;
if (front == rear)
{
cout << "The queue is empty." << endl;
return NULL;
}
else
{
NODE<T>* p = front->next;
front->next = p->next;
e = p->data;
//注意判斷當(dāng)只有一個(gè)元素,且刪除它之后,rear指向的node被刪除
//應(yīng)將其指向頭結(jié)點(diǎn)
if (rear == p)
{
rear = front;
}
delete p; p = NULL;
return e;
}
}
//取得隊(duì)頭元素
T front_element()
{
if (front == rear)
{
cout << "The queue is empty." << endl;
return NULL;
}
else
{
NODE<T>* p = front->next;
return p->data;
}
}
T back_element()
{
if (front == rear)
{
cout << "The queue is empty." << endl;
return NULL;
}
else
{
return rear->data;
}
}
//取得隊(duì)列元素個(gè)數(shù)
int size()
{
int count(0);
NODE<T>* p = front;
while (p != rear)
{
p = p->next;
count++;
}
return count;
}
//判斷隊(duì)列是否為空
bool empty()
{
if (front == rear)
{
return true;
}
else
{
return false;
}
}
private:
NODE<T>* front; //指向頭結(jié)點(diǎn)的指針。 front->next->data是隊(duì)頭第一個(gè)元素。
NODE<T>* rear;//指向隊(duì)尾(最后添加的一個(gè)元素)的指針
};
int _tmain(int argc, _TCHAR* argv[])
{
MyQueue<int> myqueue;
cout << myqueue.size() << endl;
myqueue.push(10);
myqueue.push(20);
myqueue.push(30);
cout << myqueue.front_element() << endl;
cout << myqueue.back_element() << endl;
myqueue.pop();
if (myqueue.empty())
{
cout << "The queue is empty now." << endl;
}
else
{
cout << "The queue has " << myqueue.size() << " elements now." << endl;
}
myqueue.pop();
myqueue.pop();
if (myqueue.empty())
{
cout << "The queue is empty now." << endl;
}
else
{
cout << "The queue has " << myqueue.size() << " elements now." << endl;
}
return 0;
}
相關(guān)文章
C語(yǔ)言超詳細(xì)講解getchar函數(shù)的使用
C 庫(kù)函數(shù) int getchar(void) 從標(biāo)準(zhǔn)輸入 stdin 獲取一個(gè)字符(一個(gè)無(wú)符號(hào)字符)。這等同于 getc 帶有 stdin 作為參數(shù),下面讓我們?cè)敿?xì)來(lái)看看2022-05-05
簡(jiǎn)單總結(jié)C語(yǔ)言中各種類型的指針的概念
這篇文章主要簡(jiǎn)單總結(jié)了C語(yǔ)言中各種類型的指針的概念,指針可以說(shuō)是C語(yǔ)言本身所具有的最大特性,平時(shí)根據(jù)不同使用場(chǎng)合習(xí)慣地將其簡(jiǎn)單分類,需要的朋友可以參考下2016-03-03
關(guān)于C++函數(shù)模版的實(shí)現(xiàn)講解
今天小編就為大家分享一篇關(guān)于關(guān)于C++函數(shù)模版的實(shí)現(xiàn)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
DSP中浮點(diǎn)轉(zhuǎn)定點(diǎn)運(yùn)算--定點(diǎn)數(shù)模擬浮點(diǎn)數(shù)運(yùn)算及常見(jiàn)的策略
本文主要講解DSP中定點(diǎn)數(shù)模擬浮點(diǎn)數(shù)運(yùn)算及常見(jiàn)的策略,具有參考價(jià)值,需要的朋友可以參考一下。2016-06-06
C語(yǔ)言報(bào)錯(cuò):Buffer Overflow的原因和解決辦法
Buffer Overflow是C語(yǔ)言中常見(jiàn)且危險(xiǎn)的內(nèi)存錯(cuò)誤之一,它通常在程序試圖向緩沖區(qū)(如數(shù)組或內(nèi)存塊)寫(xiě)入超過(guò)其容量的數(shù)據(jù)時(shí)發(fā)生,本文將詳細(xì)介紹Buffer Overflow的產(chǎn)生原因,提供多種解決方案,需要的朋友可以參考下2024-07-07
C 語(yǔ)言編寫(xiě)一個(gè)計(jì)算器界面(可視化界面和多功能)
今天給大家分享一個(gè)計(jì)算器功能,主要功能有加法減法乘除法求余功能,用戶可以在主菜單選擇需要計(jì)算的功能,接下來(lái)根據(jù)用戶輸入的數(shù)字進(jìn)行計(jì)算輸出結(jié)果,喜歡的朋友拿去用吧2021-06-06
基于C語(yǔ)言實(shí)現(xiàn)創(chuàng)意多彩貪吃蛇游戲
這篇文章主要介紹了如何利用C語(yǔ)言實(shí)現(xiàn)一個(gè)創(chuàng)意多彩貪吃蛇游戲,這是一個(gè)純C語(yǔ)言外加easyx庫(kù)的繪圖函數(shù)制作而成的有趣小游戲,無(wú)需引入額外資源,感興趣的可以動(dòng)手嘗試一下2022-08-08
C語(yǔ)言函數(shù)聲明以及函數(shù)原型超詳細(xì)講解示例
這篇文章主要介紹了C語(yǔ)言函數(shù)聲明以及函數(shù)原型超詳細(xì)講解,C語(yǔ)言代碼由上到下依次執(zhí)行,原則上函數(shù)定義要出現(xiàn)在函數(shù)調(diào)用之前,否則就會(huì)報(bào)錯(cuò)。但在實(shí)際開(kāi)發(fā)中,經(jīng)常會(huì)在函數(shù)定義之前使用它們,這個(gè)時(shí)候就需要提前聲明2023-02-02
C++實(shí)現(xiàn)LeetCode(202.快樂(lè)數(shù))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(202.快樂(lè)數(shù)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08

