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

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

.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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值