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

本文共 1731 字,大约阅读时间需要 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(); }}

 

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

转载于:https://www.cnblogs.com/hapjin/p/5635918.html

你可能感兴趣的文章
SQL表连接
查看>>
新秀系列C/C++经典问题(四)
查看>>
memset函数具体说明
查看>>
经常使用的android弹出对话框
查看>>
确保新站自身站点设计的合理性的六大注意点
查看>>
1033. 旧键盘打字(20)
查看>>
The Zen of Python
查看>>
git安装及使用
查看>>
mysql一个非常实用解决sql查询优化的函数explain
查看>>
图文讲解NTFS和FAT32硬盘下 asp.net 生成word 错误: 80070005 和 错误:8000401a 的解决方法...
查看>>
《学习》5连接查询(高级查询)
查看>>
[BZOJ2730][HNOI2012]矿场搭建 点双 割点
查看>>
Linux/Mac 挂载远程服务器目录到本地
查看>>
1,实现在线答题 2,答题结束后可以判断对错 3,并将错题的结果保存起来。...
查看>>
JS中原始值和引用值的储存方式
查看>>
初学C#的简单编程题合集(更新)
查看>>
Linux学习闲谈(一)——Shell基本操作与命令
查看>>
写日志文件
查看>>
jvm 学习 二
查看>>
Date的格式转换
查看>>