双链表实现Queue
算法导论第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的更多相关文章
- 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t
nginx源代码分析数据结构篇(两) 双链表ngx_queue_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...
- JAVA 链表操作:单链表和双链表
主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...
- java实现双链表(差点没写吐系列...)
刚才把单链表写完了,现在又把双链表写了,双链表和单链表的区别就是每个节点有prior和next两个指针,不同于单链表的一个next指针,而且,正是因为有这两个指针,所以双链表可以前后两个方向去移动指针 ...
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- C和指针 第十二章 使用结构和指针 双链表和语句提炼
双链表中每个节点包含指向当前和之后节点的指针,插入节点到双链表中需要考虑四种情况: 1.插入到链表头部 2.插入到链表尾部 3.插入到空链表中 4.插入到链表内部 #include <stdio ...
- [C++11][数据结构]自己的双链表实现
这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...
- C#双链表
单链表允许从一个结点直接访问它的后继结点,所以, 找直接后继结点的时间复杂度是 O(1).但是,要找某个结点的直接前驱结点,只能从表的头引用开始遍历各结点.如果某个结点的 Next 等于该结点,那么, ...
- Linux 底下使用C语言的 单链表 ,双链表,二叉树 读取文件,并排序
直接上代码 单链表Linux读文件排序: 双链表Linux读取文件排序: 二叉树LinuX读取文件并排序:
- 再谈LRU双链表内存管理
N年前我写了个双链表也发了博客,还添了代码.但是那个代码不但复杂,而且还有有问题的,一直懒得整理,放在空间误导别人.最近在写服务端,今天抽点空补一篇. 关于LRU网上随便搜,有过后端经验的人应该很多都 ...
随机推荐
- PHP文件操作[总结]
1.前言 工作中涉及到数据处理,后台需要用到PHP处理数据,之前没有接触过PHP,借此机会了解了一下PHP,PHP很方便,很灵活,编码很舒服,很喜欢用PHP处理后台数据.今天总结一下php文件操作,主 ...
- Git 以分支的方式同时管理多个项目
你是否遇到过这样的问题: 你的客户在你们这边做了N个项目,而项目之间又存在着某些业务关联(数据库访问等) 之前你可能是这样处理的,为客户的每个项目创建单独的Git版本 PC项目 手机项目 微信项目 其 ...
- 以sb7code为基础创建一个基本的OpenGL项目
以sb7code为基础创建一个基本的OpenGL项目 从github上面下载sb7code代码: https://github.com/openglsuperbible/sb7code 打开H ...
- Java 大型系统高并发大数据的处理方式
页面静态化 (页面层面的缓存) 缓存 (memcached.redis等,数据缓存.避免多次请求) 集群负载均衡(单机处理能力不足) 分库分表(大量数据的处理.原则分.分.分) 读写分离 队列.MQ. ...
- (纪录片)电的故事 Shock & Awe The Story of Electricity
简介: 导演: Tim Usborne主演: Jim Al-Khalili类型: 纪录片 / 传记 / 历史官方网站: www.bbc.co.uk/programmes/p00kjq6d制片国家/地区 ...
- editplus教程
Editplus 3.0 开发ext 教程 使用Editplus配置轻型的PHP调试环境 Editplus已经使用了很多年,一直很喜欢这个小巧.精致的文本编辑器,比起ZenStudio这样庞大的IDE ...
- JavaScript 作用域和闭包——另一个角度:扩展你对作用域和闭包的认识【翻译+整理】
原文地址 --这篇文章有点意思,可以扩展你对作用域和闭包的认识. 本文内容 背景 作用域 闭包 臭名昭著的循环问题 自调用函数(匿名函数) 其他 我认为,尝试向别人解释 JavaScript 作用域和 ...
- Persistent Netcat Backdoor
In this example, instead of looking up information on the remote system, we will be installing a net ...
- bootstrap——强大的网页设计元素模板
本文介绍一个网页设计工具——bootstrap,它包含了很多华丽的按钮及排版,我们可以在网页设计中直接使用它,尤其是加入我们只是想简单的使用一下的话,将会是一个不错的选择,下面是几张examples, ...
- JAVA的CLASS文件详解
一.事例 1.1 Test.java public class Test { public static void main(String[] args) { System.out.println(& ...