用C++实现队列的程序代码

 更新时间:2013年05月29日 14:51:06   作者:  
本篇文章是对使用C++实现队列的程序代码进行了详细的分析介绍,需要的朋友参考下
C++实现队列,如有不足之处,还望指正
复制代码 代码如下:

// MyQueue.cpp : 定义控制台应用程序的入口点。
//实现链式队列(queue),包括一个头结点。队列操作包括在队头出队(pop)、在队尾入队(push)、
//取得队头元素(front_element)、取得队尾元素(back_element)、队列元素个数(size)、
//队列是否为空(empty)。
#include "stdafx.h"
#include <iostream>
using namespace std;
//定义队列的节点结构
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被删除
   //应将其指向头结点
   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;
  }
 }

 //取得队列元素个数
 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; //指向头结点的指针。 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;
}

相关文章

  • C语言超详细讲解getchar函数的使用

    C语言超详细讲解getchar函数的使用

    C 库函数 int getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数,下面让我们详细来看看
    2022-05-05
  • 简单总结C语言中各种类型的指针的概念

    简单总结C语言中各种类型的指针的概念

    这篇文章主要简单总结了C语言中各种类型的指针的概念,指针可以说是C语言本身所具有的最大特性,平时根据不同使用场合习惯地将其简单分类,需要的朋友可以参考下
    2016-03-03
  • Qt 自定义分页控件的实现

    Qt 自定义分页控件的实现

    在应用程序开发时经常会遇到数据分页的需求,每一页展示特定数量的数据,通过点击按钮翻页或者输入页码跳转到指定页,本文就来介绍一下Qt 自定义分页控件的实现,感兴趣的可以了解一下
    2023-11-11
  • 关于C++函数模版的实现讲解

    关于C++函数模版的实现讲解

    今天小编就为大家分享一篇关于关于C++函数模版的实现讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • DSP中浮点转定点运算--定点数模拟浮点数运算及常见的策略

    DSP中浮点转定点运算--定点数模拟浮点数运算及常见的策略

    本文主要讲解DSP中定点数模拟浮点数运算及常见的策略,具有参考价值,需要的朋友可以参考一下。
    2016-06-06
  • C语言报错:Buffer Overflow的原因和解决办法

    C语言报错:Buffer Overflow的原因和解决办法

    Buffer Overflow是C语言中常见且危险的内存错误之一,它通常在程序试图向缓冲区(如数组或内存块)写入超过其容量的数据时发生,本文将详细介绍Buffer Overflow的产生原因,提供多种解决方案,需要的朋友可以参考下
    2024-07-07
  • C 语言编写一个计算器界面(可视化界面和多功能)

    C 语言编写一个计算器界面(可视化界面和多功能)

    今天给大家分享一个计算器功能,主要功能有加法减法乘除法求余功能,用户可以在主菜单选择需要计算的功能,接下来根据用户输入的数字进行计算输出结果,喜欢的朋友拿去用吧
    2021-06-06
  • 基于C语言实现创意多彩贪吃蛇游戏

    基于C语言实现创意多彩贪吃蛇游戏

    这篇文章主要介绍了如何利用C语言实现一个创意多彩贪吃蛇游戏,这是一个纯C语言外加easyx库的绘图函数制作而成的有趣小游戏,无需引入额外资源,感兴趣的可以动手尝试一下
    2022-08-08
  • C语言函数声明以及函数原型超详细讲解示例

    C语言函数声明以及函数原型超详细讲解示例

    这篇文章主要介绍了C语言函数声明以及函数原型超详细讲解,C语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错。但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明
    2023-02-02
  • C++实现LeetCode(202.快乐数)

    C++实现LeetCode(202.快乐数)

    这篇文章主要介绍了C++实现LeetCode(202.快乐数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论