关闭

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

374人阅读 评论(0) 收藏 举报

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

.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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28929次
    • 积分:600
    • 等级:
    • 排名:千里之外
    • 原创:33篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条