用C++實現(xiàn)隊列的程序代碼
更新時間:2013年05月29日 14:51:06 作者:
本篇文章是對使用C++實現(xiàn)隊列的程序代碼進行了詳細的分析介紹,需要的朋友參考下
C++實現(xiàn)隊列,如有不足之處,還望指正
// MyQueue.cpp : 定義控制臺應(yīng)用程序的入口點。
//實現(xiàn)鏈式隊列(queue),包括一個頭結(jié)點。隊列操作包括在隊頭出隊(pop)、在隊尾入隊(push)、
//取得隊頭元素(front_element)、取得隊尾元素(back_element)、隊列元素個數(shù)(size)、
//隊列是否為空(empty)。
#include "stdafx.h"
#include <iostream>
using namespace std;
//定義隊列的節(jié)點結(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;
}
//在隊尾入隊
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;
}
//在隊頭出隊
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;
//注意判斷當只有一個元素,且刪除它之后,rear指向的node被刪除
//應(yīng)將其指向頭結(jié)點
if (rear == p)
{
rear = front;
}
delete p; p = NULL;
return e;
}
}
//取得隊頭元素
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;
}
}
//取得隊列元素個數(shù)
int size()
{
int count(0);
NODE<T>* p = front;
while (p != rear)
{
p = p->next;
count++;
}
return count;
}
//判斷隊列是否為空
bool empty()
{
if (front == rear)
{
return true;
}
else
{
return false;
}
}
private:
NODE<T>* front; //指向頭結(jié)點的指針。 front->next->data是隊頭第一個元素。
NODE<T>* rear;//指向隊尾(最后添加的一個元素)的指針
};
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;
}
復(fù)制代碼 代碼如下:
// MyQueue.cpp : 定義控制臺應(yīng)用程序的入口點。
//實現(xiàn)鏈式隊列(queue),包括一個頭結(jié)點。隊列操作包括在隊頭出隊(pop)、在隊尾入隊(push)、
//取得隊頭元素(front_element)、取得隊尾元素(back_element)、隊列元素個數(shù)(size)、
//隊列是否為空(empty)。
#include "stdafx.h"
#include <iostream>
using namespace std;
//定義隊列的節(jié)點結(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;
}
//在隊尾入隊
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;
}
//在隊頭出隊
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;
//注意判斷當只有一個元素,且刪除它之后,rear指向的node被刪除
//應(yīng)將其指向頭結(jié)點
if (rear == p)
{
rear = front;
}
delete p; p = NULL;
return e;
}
}
//取得隊頭元素
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;
}
}
//取得隊列元素個數(shù)
int size()
{
int count(0);
NODE<T>* p = front;
while (p != rear)
{
p = p->next;
count++;
}
return count;
}
//判斷隊列是否為空
bool empty()
{
if (front == rear)
{
return true;
}
else
{
return false;
}
}
private:
NODE<T>* front; //指向頭結(jié)點的指針。 front->next->data是隊頭第一個元素。
NODE<T>* rear;//指向隊尾(最后添加的一個元素)的指針
};
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)文章
關(guān)于C++函數(shù)模版的實現(xiàn)講解
今天小編就為大家分享一篇關(guān)于關(guān)于C++函數(shù)模版的實現(xiàn)講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
DSP中浮點轉(zhuǎn)定點運算--定點數(shù)模擬浮點數(shù)運算及常見的策略
本文主要講解DSP中定點數(shù)模擬浮點數(shù)運算及常見的策略,具有參考價值,需要的朋友可以參考一下。2016-06-06
基于C語言實現(xiàn)創(chuàng)意多彩貪吃蛇游戲
這篇文章主要介紹了如何利用C語言實現(xiàn)一個創(chuàng)意多彩貪吃蛇游戲,這是一個純C語言外加easyx庫的繪圖函數(shù)制作而成的有趣小游戲,無需引入額外資源,感興趣的可以動手嘗試一下2022-08-08
C語言函數(shù)聲明以及函數(shù)原型超詳細講解示例
這篇文章主要介紹了C語言函數(shù)聲明以及函數(shù)原型超詳細講解,C語言代碼由上到下依次執(zhí)行,原則上函數(shù)定義要出現(xiàn)在函數(shù)調(diào)用之前,否則就會報錯。但在實際開發(fā)中,經(jīng)常會在函數(shù)定義之前使用它們,這個時候就需要提前聲明2023-02-02
C++實現(xiàn)LeetCode(202.快樂數(shù))
這篇文章主要介紹了C++實現(xiàn)LeetCode(202.快樂數(shù)),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08

