算法导论第10章的东西,感觉用双链表真心简单,就是有点浪费空间,但是时间复杂度O(1):

#include <stdio.h>

struct LinkNode
{
LinkNode(): m_Value(-)
, m_pPreNode(NULL)
, m_pNextNode(NULL)
{ }
int m_Value;
LinkNode* m_pPreNode;
LinkNode* m_pNextNode;
};
class Queue
{
public:
void Init()
{
m_pHeadNode = new LinkNode();
m_pHeadNode->m_pNextNode = m_pHeadNode;
m_pHeadNode->m_pPreNode = m_pHeadNode;
}
void DeEqueue()
{
if (m_pHeadNode->m_pPreNode == m_pHeadNode)
{
return ;
} LinkNode* lpNode = m_pHeadNode->m_pNextNode;
m_pHeadNode->m_pNextNode = lpNode->m_pNextNode;
lpNode->m_pNextNode->m_pPreNode = m_pHeadNode; delete lpNode;
lpNode = NULL;
}
int Tail()
{
LinkNode* lpTail = m_pHeadNode->m_pPreNode;
if (lpTail != m_pHeadNode)
{
int lTop = lpTail->m_Value;
printf("tail:%d\n",lTop);
return lTop;
}
return -;
} int Head()
{
LinkNode* lpHead = m_pHeadNode->m_pNextNode;
if (lpHead != m_pHeadNode)
{
printf("Head:%d\n",lpHead->m_Value);
return lpHead->m_Value;
}
return -;
}
void EnQueue(int aValue)
{
LinkNode* lpNewNode = new LinkNode();
lpNewNode->m_Value = aValue; LinkNode* lpNode = m_pHeadNode->m_pPreNode;
if (NULL == lpNode)
{
m_pHeadNode->m_pPreNode = lpNewNode;
lpNewNode->m_pNextNode = m_pHeadNode;
lpNewNode->m_pPreNode = m_pHeadNode;
m_pHeadNode->m_pNextNode = lpNewNode;
}
else
{
m_pHeadNode->m_pPreNode = lpNewNode;
lpNewNode->m_pNextNode = m_pHeadNode;
lpNewNode->m_pPreNode = lpNode;
lpNode->m_pNextNode = lpNewNode;
}
}
void Print()
{
LinkNode* lpNode = m_pHeadNode->m_pNextNode;
while(lpNode)
{
if (lpNode == m_pHeadNode)
{
break;
} printf("%d ",lpNode->m_Value);
lpNode = lpNode->m_pNextNode;
}
}
private:
LinkNode* m_pHeadNode;
};
int main()
{
Queue lQueue;
lQueue.Init();
lQueue.EnQueue();
lQueue.Head();
lQueue.Tail();
lQueue.EnQueue();
lQueue.Head();
lQueue.Tail();
lQueue.EnQueue();
lQueue.Head();
lQueue.Tail();
lQueue.DeEqueue();
lQueue.Head();
lQueue.Tail();
lQueue.Print();
}

双链表实现Queue的更多相关文章

  1. 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t

    nginx源代码分析数据结构篇(两) 双链表ngx_queue_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...

  2. JAVA 链表操作:单链表和双链表

    主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...

  3. java实现双链表(差点没写吐系列...)

    刚才把单链表写完了,现在又把双链表写了,双链表和单链表的区别就是每个节点有prior和next两个指针,不同于单链表的一个next指针,而且,正是因为有这两个指针,所以双链表可以前后两个方向去移动指针 ...

  4. 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  5. C和指针 第十二章 使用结构和指针 双链表和语句提炼

    双链表中每个节点包含指向当前和之后节点的指针,插入节点到双链表中需要考虑四种情况: 1.插入到链表头部 2.插入到链表尾部 3.插入到空链表中 4.插入到链表内部 #include <stdio ...

  6. [C++11][数据结构]自己的双链表实现

    这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...

  7. C#双链表

    单链表允许从一个结点直接访问它的后继结点,所以, 找直接后继结点的时间复杂度是 O(1).但是,要找某个结点的直接前驱结点,只能从表的头引用开始遍历各结点.如果某个结点的 Next 等于该结点,那么, ...

  8. Linux 底下使用C语言的 单链表 ,双链表,二叉树 读取文件,并排序

    直接上代码 单链表Linux读文件排序: 双链表Linux读取文件排序: 二叉树LinuX读取文件并排序:

  9. 再谈LRU双链表内存管理

    N年前我写了个双链表也发了博客,还添了代码.但是那个代码不但复杂,而且还有有问题的,一直懒得整理,放在空间误导别人.最近在写服务端,今天抽点空补一篇. 关于LRU网上随便搜,有过后端经验的人应该很多都 ...

随机推荐

  1. PHP文件操作[总结]

    1.前言 工作中涉及到数据处理,后台需要用到PHP处理数据,之前没有接触过PHP,借此机会了解了一下PHP,PHP很方便,很灵活,编码很舒服,很喜欢用PHP处理后台数据.今天总结一下php文件操作,主 ...

  2. Git 以分支的方式同时管理多个项目

    你是否遇到过这样的问题: 你的客户在你们这边做了N个项目,而项目之间又存在着某些业务关联(数据库访问等) 之前你可能是这样处理的,为客户的每个项目创建单独的Git版本 PC项目 手机项目 微信项目 其 ...

  3. 以sb7code为基础创建一个基本的OpenGL项目

      以sb7code为基础创建一个基本的OpenGL项目   从github上面下载sb7code代码: https://github.com/openglsuperbible/sb7code 打开H ...

  4. Java 大型系统高并发大数据的处理方式

    页面静态化 (页面层面的缓存) 缓存 (memcached.redis等,数据缓存.避免多次请求) 集群负载均衡(单机处理能力不足) 分库分表(大量数据的处理.原则分.分.分) 读写分离 队列.MQ. ...

  5. (纪录片)电的故事 Shock & Awe The Story of Electricity

    简介: 导演: Tim Usborne主演: Jim Al-Khalili类型: 纪录片 / 传记 / 历史官方网站: www.bbc.co.uk/programmes/p00kjq6d制片国家/地区 ...

  6. editplus教程

    Editplus 3.0 开发ext 教程 使用Editplus配置轻型的PHP调试环境 Editplus已经使用了很多年,一直很喜欢这个小巧.精致的文本编辑器,比起ZenStudio这样庞大的IDE ...

  7. JavaScript 作用域和闭包——另一个角度:扩展你对作用域和闭包的认识【翻译+整理】

    原文地址 --这篇文章有点意思,可以扩展你对作用域和闭包的认识. 本文内容 背景 作用域 闭包 臭名昭著的循环问题 自调用函数(匿名函数) 其他 我认为,尝试向别人解释 JavaScript 作用域和 ...

  8. Persistent Netcat Backdoor

    In this example, instead of looking up information on the remote system, we will be installing a net ...

  9. bootstrap——强大的网页设计元素模板

    本文介绍一个网页设计工具——bootstrap,它包含了很多华丽的按钮及排版,我们可以在网页设计中直接使用它,尤其是加入我们只是想简单的使用一下的话,将会是一个不错的选择,下面是几张examples, ...

  10. JAVA的CLASS文件详解

    一.事例 1.1 Test.java public class Test { public static void main(String[] args) { System.out.println(& ...