JAVA——栈的基本用法
2022/2/11 11:13:18
本文主要是介绍JAVA——栈的基本用法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
栈的基本用法
- 一、基本介绍
- 1.概念
- 2.栈能用单链表实现吗?
- 二、JAVA集合类对应的栈(Stack)
- 三、自己实现栈的基本操作
一、基本介绍
1.概念
栈:(先进后出)
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:
栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:
栈的删除操作叫做出栈。出数据在栈顶。
2.栈能用单链表实现吗?
单链表尾插法每次得找到末尾才能插入,不占优势。下面介绍的都由数组实现。
实现方式 | 入栈出栈时间复杂度 |
---|---|
数组 | O(1) |
单链表 | 头插法 :O(1)尾插法:O(N) |
二、JAVA集合类对应的栈(Stack)
向栈中存放元素:stack.push();
获取栈顶元素:stack.peek();
删除栈顶元素(返回值为删除的元素):stack.pop();
public static void main2(String[] args) { Stack<Integer> stack = new Stack<>();//创建一个栈 //向栈中存放1,2,3个元素 stack.push(1); stack.push(2); stack.push(3); System.out.println(stack.peek());//获取栈顶元素 但是不删除 结果为3 System.out.println(stack.pop());//弹出栈顶元素 删除 结果为3 System.out.println(stack.peek());//获取栈顶元素 但是不删除 结果为2 System.out.println(stack.empty());//将栈中元素置为空 System.out.println(stack.isEmpty());//判断是否为空 }
三、自己实现栈的基本操作
1.开辟一个栈的空间
2.push往栈中存放元素要判断栈满没满,满了进行扩容,没满则存放到数组最后的位置。
3.pop删除栈顶元素要判断栈是否为空
public class MyStack { public int[] elem;//开辟一个栈的空间 public int usedSize;//栈实际用的长度 public MyStack() { this.elem = new int[10];//设置栈的空间为10个元素的空间 } //push往栈中存放元素要判断栈满没满 public boolean isFull() { //数据个数==长度了 if (this.usedSize == this.elem.length) { return true; } return false; } public void push(int item) { if (isFull()) { //满了进行扩容 this.elem = Arrays.copyOf(this.elem, 2 * elem.length); } //没满,存放到数组最后的位置 this.elem[this.usedSize] = item; this.usedSize++; } //pop删除栈顶元素要判断栈是否为空 public boolean empty(){ //数据个数为空的时候 return this.usedSize==0; } public int pop() throws RuntimeException { if (empty()) { throw new RuntimeException("栈空了"); } int val=this.elem[this.usedSize-1]; this.usedSize--; return val; } //获取栈顶元素 public int peek(){ if(empty()){ throw new RuntimeException("栈空了"); } return this.elem[this.usedSize-1]; } public static void main(String[] args) { MyStack myStack = new MyStack(); myStack.push(1); myStack.push(2); myStack.push(3); System.out.println(myStack.peek());//获取栈顶元素 但是不删除 结果为3 System.out.println(myStack.pop());//弹出栈顶元素 删除 结果为3 System.out.println(myStack.peek());//获取栈顶元素 但是不删除 结果为2 System.out.println(myStack.empty());//结果为false System.out.println(myStack.pop());//2 System.out.println(myStack.pop());//1 System.out.println(myStack.pop());//证明为空报异常 } }
这篇关于JAVA——栈的基本用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?