经典数据结构之队列的链表实现方法

原创 2013年12月01日 22:18:56

队列,其实就是先进先出,可以看做有特殊规定的数组或者链表,所以是适配器,并非一个全新的东西。具体代码如下:

.h

#include <assert.h>
#include <stdio.h>

template<typename T>
class CLinkQueue;

template<typename T>
struct SNode{
	friend class CLinkQueue<T>;
private:
	SNode<T>* m_pNext;
	T m_nData;
public:
	SNode();
	SNode(const T& data);
    ~SNode();
};

template<typename T>
SNode<T>::SNode():
	m_pNext(NULL) {}

template<typename T>
SNode<T>::SNode(const T& data):
	m_pNext(NULL), m_nData(data) {}

template<typename T>
SNode<T>::~SNode(){
    m_pNext = NULL;
}


template<typename T>
class CLinkQueue{
private:
	// members;
	SNode<T>* m_pFront;
	SNode<T>* m_pRear;
public:
	// constructor;
    CLinkQueue();
	~CLinkQueue();
    // methods;    
	CLinkQueue& mAdd(const int& data);
	CLinkQueue& mDelete();
    T mFirst() const;
	T mLast() const;
	bool mIsEmpty() const;
};

template<typename T>
CLinkQueue<T>::CLinkQueue():
	m_pFront(NULL), m_pRear(NULL){}

template<typename T>
CLinkQueue<T>::~CLinkQueue(){
	while(m_pFront != m_pRear){
		SNode<T>* tmp = m_pFront;
		m_pFront = m_pFront -> m_pNext;
		delete tmp;
	}
}

template<typename T>
CLinkQueue<T>& CLinkQueue<T>::mAdd(const int& data){
	SNode<T>* tmp = new SNode<T>(data);
	if(m_pFront){
		m_pRear -> m_pNext = tmp;
		m_pRear = m_pRear -> m_pNext;
	}else
	    m_pFront = m_pRear = tmp;
    return *this;	
}

template<typename T>
CLinkQueue<T>& CLinkQueue<T>::mDelete(){
	if(m_pFront != NULL){
		SNode<T>* tmp = m_pFront;
		m_pFront = m_pFront -> m_pNext;
		delete tmp;
	}
    return *this;
}

template<typename T>
bool CLinkQueue<T>::mIsEmpty() const{
	return (m_pFront == NULL) ? true : false;
}

template<typename T>
T CLinkQueue<T>::mFirst() const{
    assert(m_pFront != NULL);
	return m_pFront -> m_nData;
}

template<typename T>
T CLinkQueue<T>::mLast() const{
	assert(m_pRear != NULL);
	return m_pRear -> m_nData;
}

main.cpp

#include <stdlib.h>
#include <iostream>
#include "CLinkQueue.h"
using namespace std;
int main(){
    
	CLinkQueue<int> queue;
	for(auto i = 0; i < 5; i ++){
		queue.mAdd(i);
		cout << queue.mFirst() << '\t';
		cout << queue.mLast() << endl;
	}
	for(auto i = 0; i < 5; i ++)
		queue.mDelete();
	system("pause");
	return 0;
}

测试结果如下:

0       0
0       1
0       2
0       3
0       4

从输出队列上可看确实是先进先出

基础数据结构 链表、栈、队列

数据结构是程序设计中一个非常重要的部分,基本的数据结构包括链表、栈和队列,当然高级一点的还有树、图等,实际上链表、栈和队列都是线性表,只是在操作和表示方式上有所不同,线性表用顺序结构表示就是顺序表,用...
  • LucienDuan
  • LucienDuan
  • 2014年08月24日 19:15
  • 1282

数据结构——使用双端链表实现队列(java实现)

队列是这样一种数据结构:在队尾(rear)插入数据项,在队首(front)移除数据项,队列的进出顺序是先进入的先被移除(先进先出,FIFO);      Robert Lafore的书对队列的使用有...
  • u012288582
  • u012288582
  • 2015年11月27日 13:13
  • 415

【数据结构】数组、链表、栈、队列、二叉树

数组 数组存储的数据在地址空间上是连续的。 方便数据的查找,查找数据的时间复杂度为O(1)。...
  • m0_37854317
  • m0_37854317
  • 2017年04月23日 10:50
  • 702

数据结构与算法(C++版):表、栈和队列

前言本系列博客为学习数据结构与算法过程中的原创笔记,其中代码实现基于C++语言。STL中的向量和表在C++语言的库中包含有公共数据结构的实现,这就是众所周知的标准模版库(Standard Templa...
  • u013271326
  • u013271326
  • 2017年06月06日 11:37
  • 213

数据结构之队列(C实现)

一、队列是什么     队列是一种可以实现“先进先出”的存储结构。其实,说简单点,队列就是排队,跟我们日常生活中到银行取钱排队,排队打饭在道理上是一样的。     队列通常可以分为两种类型...
  • l494926429
  • l494926429
  • 2016年08月14日 15:34
  • 2675

数组、链表、堆栈、队列和树

数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合。听起来是不是很抽象,简单理解:数据结构就是描述对象间逻辑关系的学科。比如:队列就是一种先进先出的逻辑结构,栈是一种先进后出的逻辑结构,家谱...
  • wei78008023
  • wei78008023
  • 2016年02月25日 10:04
  • 2780

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心。但是,如果从一个初学者的角度利用python学习数据结...
  • u013805817
  • u013805817
  • 2015年06月06日 17:47
  • 7467

【万字总结】图解堆算法、链表、栈与队列(多图预警)

堆算法什么是堆堆(heap),是一类特殊的数据结构的统称。它通常被看作一棵树的数组对象。在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开...
  • NoMasp
  • NoMasp
  • 2015年12月18日 08:40
  • 18559

数据结构(栈,队列,链表,二叉树)

栈栈作为一种数据结构,用途十分广泛。在回调函数等许多场景中都有应用。我们需要了解它的基本用途,那就是先进后出和队列的先进先出正好相反。最近在学习数据结构和算法,于是自己来实现。我特别喜欢C语言的指针,...
  • u013766436
  • u013766436
  • 2016年05月04日 17:03
  • 1842

队列的实现(链表方式)

队列这种结构,其实就跟现实中排队买票类似,先排队的,先买票。队列的特性就是先进先出。 队列的存储有顺序存储和链式存储之分,本文主要介绍如何用链表来实现队列。...
  • Timsley
  • Timsley
  • 2016年11月29日 16:45
  • 2012
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典数据结构之队列的链表实现方法
举报原因:
原因补充:

(最多只允许输入30个字)