数据结构之队列(二)
来源:互联网 发布:jquery javascript 编辑:程序博客网 时间:2024/06/05 18:45
前一篇介绍了一种数组实现的队列,本文将介绍一种链表实现的队列,并进行简单的比较。
一、QueueAsLinkedList(点击打开链接)
先看声明,链表实现的队列没有特定的成员,只有一个链表,如下:
#pragma once#include "Queue.h"#include "LinkedList.h"using namespace FoundationalDataStructure;class QueueAsLinkedList : public virtual Queue{public: QueueAsLinkedList(); ~QueueAsLinkedList(); void Purge(); void Accept(Visitor &) const; Object & Head() const; void Enqueue(Object &); Object & Dequeue();protected: int CompareTo(Object const &) const;protected: LinkedList<Object*> list;};
实现代码,如下:
#include "stdafx.h"#include "QueueAsLinkedList.h"QueueAsLinkedList::QueueAsLinkedList() : list(){}QueueAsLinkedList::~QueueAsLinkedList(){ Purge();}void QueueAsLinkedList::Purge(){ if (IsOwner()) { for (auto ptr = list.Head(); ptr != NULL; ptr = ptr->Next()) delete ptr->Datum(); } list.Purge(); count = 0;}void QueueAsLinkedList::Accept(Visitor & visitor) const{ for (auto ptr = list.Head(); ptr != NULL && !visitor.IsDone(); ptr = ptr->Next()) visitor.Visit(*ptr->Datum());}Object & QueueAsLinkedList::Head() const{ if (count == 0) throw std::domain_error("queue is empty"); return *list.First();}void QueueAsLinkedList::Enqueue(Object & object){ list.Append(&object); ++count;}Object & QueueAsLinkedList::Dequeue(){ if (count == 0) throw std::domain_error("queue is empty"); Object &result = *list.First(); list.Extract(&result); --count; return result;}int QueueAsLinkedList::CompareTo(Object const & object) const{ return -1;}
二、比较
1,链表实现比数组实现的成员变量少;
2,链表实现在物理上是离散的,无需管理物理上的头和尾,比数组实现的代码简单;
3,链表实现和物理实现在逻辑上都是连续的;
4,链表实现没有size限制,数组实现可以限定size。
0 0
- 数据结构之队列(二)
- 学习笔记--数据结构(之二)队列
- 数据结构 - 队列(二)
- 【数据结构】之队列的java实现(二)
- linux内核分析--内核中的数据结构之队列(二)
- 【数据结构】之队列的java实现(二)
- 【数据结构】之队列的java实现(二)
- 数据结构的学习之路(二)-- 栈与队列
- 数据结构:循环队列(二)
- 【数据结构】优先级队列(二)
- 队列 数据结构作业(二)
- 数据结构之java实现队列(二)
- java 数据结构 之 队列的实现 (二)
- 数据结构之顺序队列(循环队列)
- 数据结构(6)之队列
- 数据结构之队列(炫技篇)
- 数据结构之 (单向)队列
- 数据结构之队列(一)
- Android开发需求功能一览表
- 【Qt】Qt之启动外部程序【转】
- 【Qt】QSettings介绍【转】
- Python tips: 什么是*args和**kwargs?
- 【Qt】QSettings读写注册表、配置文件【转】
- 数据结构之队列(二)
- android 开发技巧(5)--使 用 TextSwitcher 实现平滑过渡
- Oracle 11 密码永不过期
- 【Qt】QWidget、QDialog、QMainWindow的异同点【转】
- VB6.0 直接打印 PDF
- 【Qt】Qt之自定义界面(实现无边框、可移动)【转】
- 【Qt】Qt之自定义界面(添加自定义标题栏)【转】
- 把json串中“:”前面名称部分的双引号去掉,值中的双引号保留
- 【Qt】Qt之自定义界面(窗体缩放)【转】