博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义栈的实现及使用两个栈模拟队列
阅读量:6255 次
发布时间:2019-06-22

本文共 1681 字,大约阅读时间需要 5 分钟。

一,使用单链表实现栈

①栈需要一个栈顶指针

②栈的基本操作有出栈和入栈,以及判断栈是否为空

③单链表中每个结点表示一个栈元素,每个结点有指向下一个结点的指针。因此,在栈内部需要实现一个单链表。代码如下:

public class Stack
>{ private class Node{ T ele; Node next; public Node(T ele) { this.ele = ele; } } Node top;//栈顶指针 public void push(T ele){ Node n = new Node(ele); n.next = top; top = n; } public T pop(){ if(top != null) { Node tmp = top.next; T ele = top.ele; top.next = null; top = tmp; return ele; } return null; } public boolean isEmpty(){ return top == null; }}

 

二,使用两个栈实现队列

①栈是先进后出,而队列是先进先出。要实现队列,就需要实现队列的基本操作,并使基本操作满足先进先出的特点。

这里需要两个栈,一个是enStack,当有元素入队列时,一律Push到这个栈中。另一个栈是deStack,当有元素出队列时:

先检查deStack是否为空,若不为空,则从deStack中pop元素出去,作为出队列的元素。当deStack为空时,将enStack中的元素出栈,放push进deStack中,然后再从deStack中出栈。

如果enStack 和 deStack 都为空,则出队列操作返回null,代码实现如下:

public class MyQueue
> { private Stack
enStack; private Stack
deStack; public MyQueue() { enStack = new Stack
(); deStack = new Stack
(); } public void enqueue(T ele){ enStack.push(ele); } public T dequeue(){ if(!deStack.isEmpty()) { return deStack.pop(); } while(!enStack.isEmpty()){ deStack.push(enStack.pop()); } return deStack.pop(); } public boolean isEmpty(){ return enStack.isEmpty() && deStack.isEmpty(); }}

 

总结:不管是用栈模拟队列,还是用队列模拟栈,其本质都是如何一种数据结构的特性去实现另一种数据结构的特性。

转载地址:http://jmtsa.baihongyu.com/

你可能感兴趣的文章
[SAP ABAP开发技术总结]逻辑数据库
查看>>
unix ls命令
查看>>
Ajax核心技术之XMLHttpRequest
查看>>
使用T4模板生成不同部署环境下的配置文件
查看>>
如何把Json格式字符写进text文件中
查看>>
Linux: xclip,pbcopy,xsel用法 terminal 复制粘帖 (mac , ubuntu)
查看>>
[SVN(Ubuntu)] SVN 查看历史详细信息
查看>>
技术出身能做好管理吗?——能!
查看>>
抽象工厂模式
查看>>
如何折叠一段代码使整个代码看起来简洁
查看>>
Quartz2D绘制路径
查看>>
Java知多少(30)多态和动态绑定
查看>>
JDBC操作数据库
查看>>
Android中RelativeLayout的字符水平(垂直居中)对齐
查看>>
--@angularJS--独立作用域scope绑定策略之&符策略
查看>>
乾坤合一~Linux设备驱动之USB主机和设备驱动
查看>>
Python IDLE快捷键【转载合集】
查看>>
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound
查看>>
[C++] string与int, float, double相互转换
查看>>
ubuntu14.04安装chrome
查看>>