什么是栈以及用数组实现一个栈-尊龙官方平台

什么是栈以及用数组实现一个栈-java

el/2024/3/25 17:23:33

虽然栈操作看起来比数组要简单的多,但对于计算机逻辑来说是非常重要的

我们在执行程序的的时候,可能会如下列伪代码一样在方法1里调用方法2,在方法2里调用方法3,执行完毕后一层一层的返回,这就是借助程序调用的系统栈来实现的

public void function1(){system.out.println(function2());
}
public integer function2(){return function3();
}
public integer function3(){return 233;
}

在1要执行2的时候将1的状态压入程序调用的系统栈,在2执行3的时候将2的状态压入程序调用的系统栈。当3执行完的时候将2的状态出栈,并获取到3的执行结果,然后继续执行2。当2执行完毕后将1的状态出栈,并获取到2的执行结果,然后继续执行1。

 用https://blog.csdn.net/test253506088/article/details/119538593编写的动态数组实现栈

/*** 栈需要实现的一些接口*/
public interface stack {/*** 入栈** @param e*/public void push(e e);/*** 出栈,如果没有可出栈的返回null** @return*/public e pop();/*** 查看栈顶的值是什么,没有则返回null** @return*/public e peek();/*** 获取栈的大小** @return*/public integer getsize();/*** 是否为空,空返回true** @return*/public boolean isempty();
}

 具体实现

/*** 用数组的形式实现栈** @param */
public class arraystack implements stack {private array array;//用的是002号文档里实现的动态数组/*** 创建时指定栈的容量** @param capacity*/public arraystack(integer capacity) {array = new array<>(capacity);}/*** 未指定栈的容量默认为20*/public arraystack() {this(20);}@overridepublic void push(e e) {try {array.putfirst(e);} catch (exception e1) {e1.printstacktrace();}}@overridepublic e pop() {e buffer = null;try {buffer = array.getlast();array.deletelast();} catch (exception e) {e.printstacktrace();} finally {return buffer;}}@overridepublic e peek() {e buffer = null;try {buffer = array.getlast();} catch (exception e) {e.printstacktrace();} finally {return buffer;}}@overridepublic integer getsize() {return array.getsize();}@overridepublic boolean isempty() {return array.isempty();}@overridepublic string tostring() {string buffer = "";integer size = array.getsize();try {for (integer i = 0; i < size; i  ) {buffer  = array.get(i).tostring();if (i != size - 1)buffer  = ", ";}} catch (exception e) {e.printstacktrace();}// 最右边的值是栈顶return "size:"   size   "\tarraystack["   buffer   "]";}
}

http://www.ngui.cc/el/5127252.html

相关文章

什么是队列以及用数组实现队列-java

就和我们现实生活中排队一样,队列就是先进先出,从队尾进,从队首出 然后使用https://blog.csdn.net/test253506088/article/details/119538593编写的动态数组来实现一个队列arrayqueue public class arrayqueue implements queue<…

效率更高的循环队列-java

数组队列中的出队,在时间复杂度上是o(n)复杂度,因为你删除数组首端,后面的数据都要左移一位。 我们可以记录一下队首的索引和队尾索引,入队时队尾索引1,出队时队首索引-1,当队首索引与队尾索引相等时代表队…

单向链表-java

如果某个节点的next是null则代表该节点是最后一个节点,属性名为head的为第一个节点。 虚拟头结点(dummyhead)对于链表的使用者来说毫无意义,只是为了让头结点固定不改动、实现起来更方便而设计出来的一个概念。 实现代码 package blacktv.linkedlist;/*…

用单向链表实现栈-java

链表的读取、添加、删除第一个节点的时间复杂度是o(1),所以我们可以用链表来实现一个栈,最关键的是不需要考虑栈的大小,所以链表栈会比数组栈时间复杂度会低。 接口 package blacktv.stack;/*** 栈需要实现的一些接口*/ public interface stack

用单向链表实现队列-java

本文档编写的队列用的是根据单向链表编写的单向链表改进后编写的。总效果和循环队列是一样的。 接口: package blacktv.queue;/*** 实现队列需要完成的接口*/ public interface queue {/*** 入队** param e*/public void enqueue(e e);/*** 出队…

java 不同情况下byte里存储的是什么编码格式

string转成byte[]存成什么? 并不一定是ascii码。 1、 在java语言中,string 对象通过方法gebytes()可以获得byte[]对象, 它实际上是把内部的char字符,按照平台默认的字符集编码成byte数组, 2、 此外,也可以使用getbyte…

java 线程wati使用中出现的问题

首先先声明一点,wiat()方法必须释放cpu资源和锁资源,因此wiat()方法必须在锁里面调用,不在锁里面写就没有锁可释放,没锁资源可释放的话就会抛出异常。有了上述的铺垫我们来看以下代码: package test; /* 主线程测试类…

java 线程中断究竟是个啥玩意

个人对中断的理解: 线程中断就是一个信号,当有调用中断方法之后会发送一个中断信号,interrupted()或isinterrupted()的返回值会是true,没有中断信号时interrupted()或isinterrupted()的返回值是false。接收到信号之后,…

双向链表与双向循环链表

循环链表的末尾指向dummyhead 第一个节点是66下面的1代表第二个节点在数组的索引为1的地方,而99这一个节点的下一个节点索引为-1则该节点为最后一个节点。

redis可视化客户端推荐-anotherredisdesktopmanager

之前我用redis一直用黑窗进行连接,查询历史数据的时候,用黑窗查看很不直观。 git地址:https://gitee.com/qishibo/anotherredisdesktopmanager 使用截图:
网站地图