双向(端)链表、栈、队列

 

双端链表

 

双端栈

 

双端队列

从实用角度,感受不出双端队列的好处,但其可以充当栈和队列的角色.

参考资料:http://baike.baidu.com/view/1627726.htm

Test

static void Main()
{var deque = new Deque<int>();Console.WriteLine("Stack:");//stackdeque.AddFirst(1);deque.AddFirst(2);deque.AddFirst(3);Console.WriteLine(deque.RemoveFirst());Console.WriteLine(deque.RemoveFirst());Console.WriteLine(deque.RemoveFirst());//queueConsole.WriteLine("Queue:");deque.AddFirst(1);deque.AddFirst(2);deque.AddFirst(3);Console.WriteLine(deque.RemoveLast());Console.WriteLine(deque.RemoveLast());Console.WriteLine(deque.RemoveLast());  }

image

当AddFirst和AddLast同时使用时则变成2个栈了

deque.AddFirst(1);
deque.AddFirst(2);
deque.AddFirst(3);
deque.AddLast(6);
deque.AddLast(7);
deque.AddLast(8);
Console.WriteLine(deque.RemoveLast());
Console.WriteLine(deque.RemoveLast());
Console.WriteLine(deque.RemoveLast());  
Console.WriteLine(deque.RemoveFirst());
Console.WriteLine(deque.RemoveFirst());
Console.WriteLine(deque.RemoveFirst());

image

简单实现

public interface IDeque<T>
{void AddFirst(T node);void AddLast(T node);T RemoveFirst();T RemoveLast();T PeekFirst();T PeekLast();
}public class Deque<T> : IDeque<T>
{private T[] _elements;private int head, end;public Deque(){_elements = new T[2];}//1,2,3,4public Deque(int capacity){_elements=new T[capacity];}public void AddFirst(T node){//loop indexif (--head < 0)head += _elements.Length;//val_elements[head] = node;//check capacityif (head == end)DoubleCapacity();}public void AddLast(T node){_elements[end] = node;if (++end < 0)end -= _elements.Length;if (head == end)DoubleCapacity();}private void DoubleCapacity(){int p = head;int n = _elements.Length;int r = n - p; int newCapacity = n << 1;T[] a = new T[newCapacity];Array.Copy(_elements, p, a, 0, r);Array.Copy(_elements, 0, a, r, p);_elements = (T[]) a;head = 0;end = n;}public T RemoveFirst(){T result = _elements[head]; _elements[head] = default(T);     if (++head >= _elements.Length)head -= _elements.Length;return result;}public T RemoveLast(){if (--end < 0)end += _elements.Length;T result = _elements[end];_elements[end] = default(T);return result;}public T PeekFirst(){return _elements[head];}public T PeekLast(){if (end == 0)return _elements[_elements.Length - 1];elsereturn _elements[end - 1];}public int GetLength(){return (end - head) & (_elements.Length - 1);}public bool IsEmpty(){return head == end;}public void Display(){foreach (var element in _elements){Console.Write(element+",");}Console.WriteLine();}
}

优先级队列PriorityQueue

两个主要的方法,我想的与源码不同,结果是相同的,没掌握一定技巧,以后回头再看吧

/// <summary>
/// 上滤,小为上,升序
/// </summary> /// <param name="item">The item.</param> private void PercolateUpAscending(T item) {int i;for (i = Count - 1; i >= 0; i--){if (Compare(_heap[i], item) > 0){_heap[i + 1] = _heap[i];}elsebreak;}_heap[++i] = item;Count++; }/// <summary> /// 上滤,大为上,降序 /// </summary> /// <param name="item">The item.</param> private void PercolateUpDescending(T item) {int i;for (i = Count - 1; i >= 0; i--){if (Compare(item, _heap[i]) > 0){_heap[i + 1] = _heap[i];}elsebreak;}_heap[++i] = item;Count++; }

转载于:https://www.cnblogs.com/Clingingboy/archive/2011/01/03/1924651.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wince6.0开机自启动应用程序

1、在VS2005下建立一个Win32智能设备项目&#xff0c;取名为ShellExe&#xff0c;编译如下代码&#xff1a; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { WIN32_FIND_DATA fd; HANDLE hdINVALID_HANDLE_VAL…

python语言单行注释符_云计算开发学习笔记:Python3注释

大家在学习各种编程语言的时候都会在代码里面添加一些注释&#xff0c;这个也是为了方便日后对代码的查找和修改&#xff0c;各种编程语言的注释方式略有不同&#xff0c;Python3语言也一样有自己的注释方式&#xff0c;下面我们来了解一下都有哪几种。 确保对模块&#xff0c;…

神经网络与深度学习——TensorFlow2.0实战(笔记)(二)(安装TensorFlow2.0)

创建环境并激活 conda create --name tensorflow2.0 python3.7 activate tensorflow2.0 安装相关软件包&#xff08;conda命令或pip命令2选1&#xff09; conda install numpy matplotlib PIL scikit-learn pandas pip install numpy matplotlib Pillow scikit-learn pand…

python决策树sklearn_python利用sklearn包编写决策树源代码

本文实例为大家分享了python编写决策树源代码&#xff0c;供大家参考&#xff0c;具体内容如下 因为最近实习的需要&#xff0c;所以用python里的sklearn包重新写了一次决策树。 工具&#xff1a;sklearn&#xff0c;将dot文件转化为pdf格式&#xff08;是为了将形成的决策树可…

如何在WINCE中添加WebServer组件

wince 5.0有自带的Web server组件.第三方比较好用的有GoAhead Web Server ,这是开源软件,而且支持Linux. 一、wince 5.0自带的Web server组件 步骤一: 在PB中添加以下组件: Catalog item Sysgen variable Location in Catalog Web Server (HTTPD) SYSGEN_HTTPD Communicat…

arcmap添加WMTS服务

http://xdc.at/map/wmts/ 双击 拖拽 个人公众号

[sybase]自动增长字段创建方法

在Sybase数据库创建表时&#xff0c;对于自动增长字段的写法示例&#xff1a; CREATE TABLE dbo.BM_SM_ERR (SMCWBM int identity, -- 表主键SMCWDM varchar(10) NOT NULL, YYSLX smallint NOT NULL, SMCWMS varchar(100) NOT NULL, QYBJ tinyint …

基于嵌入式操作系统VxWorks的多任务并发程序设计――中断与任务

中断处理是整个运行系统中优先级最高的代码&#xff0c;可以抢占任何任务级代码运行。中断机制是多任务环境运行的基础&#xff0c;是系统实时性的保证。几乎所有的实时多任务操作系统都需要一个周期性系统时钟中断的支持&#xff0c;用以完成时间片调度和延时处理。VxWorks 提…

jwt获取token_JWT实现token认证

1.JWT是什么&#xff1f;Json Web Token(JWT)是目前比较流行的跨域认证解决方案&#xff0c;是一种基于JSON的开发标准&#xff0c;由于数据是可以经过签名加密的&#xff0c;比较安全可靠&#xff0c;一般用于前端和服务器之间传递信息&#xff0c;也可以用在移动端和后台传递…

神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(第一个Python程序)

从程序中了解知识点&#xff0c;有详细的备注 # 判断变量num是否为正数 # 注释语句 是对程序进行说明的语句&#xff0c;在程序运行过程中不被执行 # ctrl/进行多行注释num0 # 赋值语句 大小写敏感 可以以分号结尾&#xff0c;但是在同一行必须以分号隔开 # 其数据类型由所赋…

Sqlce与SQL Server2000/2005数据转换程序

先上图 功能介绍&#xff1a; 1.根据Mssql2000/2005创建sqlce数据库表结构及索引(如果操作的表为空&#xff0c;则取mssql2000/2005的所有表&#xff0c;否则取录入的操作的表&#xff0c;用逗号隔开) 2.从mssql2000/2005导数据到已建好的sqlce(如果操作的表为空&#xff0c;则…

SRAM和SDRAM的区别

DRAM&#xff0c;动态随机存取存储器&#xff0c;需要不断的刷新&#xff0c;才能保存数据。而且是行列地址复用的&#xff0c;许多都有页模式。 SRAM&#xff0c;静态的随机存取存储器&#xff0c;加电情况下&#xff0c;不需要刷新&#xff0c;数据不会丢失&#xff0c;而且…

docker java镜像_Springboot整合MongoDB的Docker开发,其它应用也类似

1 前言Docker是容器开发的事实标准&#xff0c;而Springboot是Java微服务常用框架&#xff0c;二者必然是会走到一起的。本文将讲解如何开发Springboot项目&#xff0c;把它做成Docker镜像&#xff0c;并运行起来。2 把Springboot打包成Docker镜像Springboot的Web开发非常简单&…

神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(python输入和输出)

从程序中学习知识点 1. #输出函数可以输出字符串常量 print("hello") #输出数学表达式 print(12) #输出变量 print(num) 2. #string input(提示信息) #接收用户的输入&#xff0c;并以字符串类型返回;即键盘输入123&#xff0c;并将123赋值给string numint(input…

ManulResetEvent与AutoResetEvent

定义 ManualResetEvent&#xff1a;通知正在等待的线程已发生事件。 AutoResetEvent&#xff1a;通知正在等待的线程已发生事件。 代码 ManualResetEvent测试 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;…

Timer

[摘要] Timer是实时操作系统的一个重要组成部分。本文结合近阶段的学习和实验情况&#xff0c;对VxWorks中的时间函数和定时器作了一些探讨。主要介绍了Timer的机制&#xff0c;相关的函数&#xff0c;并给出了一些具体的例子。 一. Tick Tick是指每秒中定时器中断的次数。POS…

神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(python常量、变量和表达式)

从程序中学习知识点 1. #支持6中表达形式 数字 字符串 列表 元组 字典 集合 #数字 整型(正整数 负整数 零) #Python3中的整数可以任意大&#xff0c;而不用担心位数不够而导致溢出的情况 intnum12345678909999999999999 print(intnum,type(intnum)) #浮点数 小数 floatnum1 …

reentrantlock非公平锁不会随机挂起线程?_程序员必须要知道的ReentrantLock 及 AQS 实现原理...

专注于Java领域优质技术&#xff0c;欢迎关注作者&#xff1a;Float_Luuu提到 JAVA 加锁&#xff0c;我们通常会想到 synchronized 关键字或者是 Java Concurrent Util(后面简称JCU)包下面的 Lock&#xff0c;今天就来扒一扒 Lock 是如何实现的&#xff0c;比如我们可以先提出一…

关于SOAP的几篇文章

转载自&#xff1a;/show-1598-1.shtml PHP操作soap我总觉得是一件非常痛苦的事情&#xff0c;但没有办法&#xff0c;现在很多功能都是基于WebService的&#xff0c;比如那个amazon的&#xff0c;但其实很多 公司都也还是提供了restful之类的接口&#xff0c;使得PHP与其他系统…

VxWorks动态加载

注&#xff1a;最近在做热补丁的功能&#xff0c;看到一篇gateway写的文章&#xff0c;觉得很通俗易懂的&#xff0c;就将搜集到的资料又整理了一下&#xff0c;供大家参考。 使用动态加载目标模块的方式有很多好处&#xff0c;比如可以在不破坏原来的环境下增加调试定位功能&a…