双链表实现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网上随便搜,有过后端经验的人应该很多都 ...
随机推荐
- Qt学习之路(28): 坐标变换
经过前面的章节,我们已经能够画出一些东西来,主要就是使用QPainter的相关函数.今天,我们要看的是QPainter的坐标系统. 同很多坐标系统一样,QPainter的默认坐标的原点(0, 0) ...
- MongoDB的Invalid credentials for database
前面都好好的,结果服务器数据库加了一个验证,查了一下,也不算复杂,只要把连接串一改就行了. 结果,不断报错——Invalid credentials for database 找了半天原因,原来是我用 ...
- 一个WEB应用的开发流程
转载:http://www.51testing.com/html/56/n-3721856.html 先说项目开发过程中团队人员的分工协作. 一.人员安排 毕业至今的大部分项目都是独立完成,虽然也有和 ...
- oracle sqlldr使用(导入速度快,但对数据本身的处理功能弱)
oracle sqlldr使用(导入速度快,但对数据本身的处理功能弱) 博客分类: DB.Oracle OracleSQL sqlload.cmd pause sqlldr user/pass@tn ...
- C#.NET常见问题(FAQ)-控制台程序如何做弹窗
最简单的弹窗,只要引用System.Windows.Forms,就可以使用WinForm的弹窗 如果要弹出是/否的选择对话框,则可以拷贝下面的代码 DialogResult dr = Messag ...
- Python过滤emoji
参考博客:http://my.oschina.net/jiemachina/blog/189460 1. 将emoji表情替换为指定字符串 import re def filter_emoji(des ...
- 编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器)
[目录] 不考虑其他进程,cpu画正弦曲线 获取总体cpu利用率 获取多核处理器单个cpu利用率 考虑其他进程,cpu画正弦曲线 下面的程序针对多核处理器,可以设置让任何一个cpu显示相应的曲线(本文 ...
- 微软BI 之SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表
基于父子关系的递归结构在公司组织结构里比较常见,基本上都是在一张表里实现的自引用关系.在报表中如果要实现这种效果,并且在这个基础上做一些数据的汇总,可以使用到下面提到的方法. 要实现的效果大致如下 - ...
- Cocon90.Db调用方法
Cocon90.DB 使用说明 开源库:https://github.com/Cocon90/Cocon90.Db Sqlite位置:https://www.nuget.org/packages/Co ...
- 在TQ2440开发板上ping 127.0.0.1不通
问题:在TQ2440上ping 127.0.0.1,提示错误 ping: sendto: Network is unreachable 解决方法:ifconfig lo 127.0.0.1 up ...