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

原创 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

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

相关文章推荐

必不可少需要掌握的嵌入式知识(2) -- 经典数据结构总结之 (链表,队列)

数据结构:定义: 数据结构是计算机组织,存储数据的方式。数据结构是指相互之间存在一种或多种特定关系的元素集合,大部分的数据结构的实现都需要借助C语言中的指针和结构体类型。几种常见的数据结构:1,...

数据结构的链表,队列,栈(c)

  • 2010年12月10日 17:16
  • 227KB
  • 下载

数据结构(五)——双链表、链式栈、链式队列 及实现

一、双链表 在单链表的基础上再增加一个指向它前驱的指针,就构成了双链表。 所以双链表有三个变量:数据信息info、前驱指针llink、后继指针rlink。   二、双链表操作和实现...

数据结构-链表队列-VC源代码

  • 2010年02月04日 21:48
  • 3KB
  • 下载

Java中链表、堆栈、队列、二叉树、散列表等数据结构的实现

温习数据结构:Java中链表、堆栈、队列、二叉树、散列表等数据结构的实现 1.Java链表类List的源代码如下: import java.io.*;  public class Lis...
  • adxcq
  • adxcq
  • 2014年07月02日 10:08
  • 1282

数据结构代码 栈 链表 队列

  • 2017年08月13日 22:29
  • 8.24MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典数据结构之队列的链表实现方法
举报原因:
原因补充:

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