时间:2021-05-20
系统中的堆、栈和数据结构堆、栈不是一个概念。可以说系统中的堆、栈是真实的内存物理区,数据结构中的堆、栈是抽象的数据存储结构。
栈:实际上就是满足后进先出的性质,是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
代码:
Stack的基本使用初始化Stack stack=new Stack判断是否为空stack.empty()取栈顶值(不出栈)stack.peek()进栈stack.push(Object);出栈stack.pop();实例:public class Test01 { public static void main(String[] args) { Stack stack=new Stack(); //1.empty()栈是否为空 System.out.println(stack.empty()); //2.peek()栈顶值 3.进栈push() stack.push(new Integer(1)); stack.push("b"); System.out.println(stack.peek()); //4.pop()出栈 stack.pop(); System.out.println(stack.peek()); }}栈的主要操作
栈的辅助操作
实现
栈抽象数据类型有多种实现方式。下面是常用的方法:
1)基于简单数组实现:
public class Stack{ private int size;//栈的大小 private int top;//栈顶元素的下标 private char[] stackArray;//栈的容器 public Stack(int size){ stackArray = new char[size]; top = -1; //初始化栈的时候由于栈内没有元素,栈顶下标设为-1 this.size = size; } //入栈,栈顶的下标+1 public void push(char item){ stackArray[++top] = item; } //出栈,删除栈顶元素,栈顶元素的下标-1 public int pop(){ return stackArray[top--]; } //查看栈顶元素,不删除 public char find(){ return stackArray[top]; } //判空 public boolean isEmpty(){ return (top == -1); } //判满 public boolean isFull(){ return (top == size - 1); } public static void main(String[] args){ Stack stack = new Stack(5); stack.push('a'); stack.push('b'); stack.push('c'); stack.push('d'); char ch = stack.find(); System.out.println(ch); }}运行结果:
d
2)基于动态数组实现:
扩容——给我的感觉就像是在搬家,搬完了东西,还得把钥匙给主人
public class Stack { public int size;//栈的大小 public int top;//栈顶元素的下标 public static char[] stackArray;//栈的容器 public Stack(int size){ stackArray = new char[size]; top = -1; //初始化栈的时候由于栈内没有元素,栈顶下标设为-1 this.size = size; } //入栈,栈顶的下标+1 public void push(char item){ if(isFull()){ doubleStack(); } stackArray[++top] = item; } //模拟数组的扩容 public void doubleStack(){ char[] newStackArray = new char[size*2]; for(int i = 0;i<size;i++){ newStackArray[i] = stackArray[i]; } size = size*2; stackArray = newStackArray; } //出栈,删除栈顶元素,栈顶元素的下标-1 public int pop(){ if(isEmpty()){ System.out.println("Stack is Empty"); return 0; }else{ return stackArray[top--]; } } //查看栈顶元素,不删除 public char find(){ return stackArray[top]; } //判空 public boolean isEmpty(){ return (top == -1); } //判满 public boolean isFull(){ return (top == size - 1); } public static void main(String[] args){ Stack stack = new Stack(5); stack.push('a'); stack.push('b'); stack.push('c'); stack.push('d'); stack.push('e'); stack.push('f'); stack.push('g'); stack.push('h');//一共8个元素 char ch = stack.find(); System.out.println(ch); System.out.println(stackArray.length); }}运行结果:
h
10
3)基于链表实现
使用链表实现栈,通过在链表的表头插入元素的方式实现push操作,删除链表的表头结点实现pop操作。表头结点即栈顶结点
import java.util.EmptyStackException;class Link{ public char data; public Link next; public void show(){ System.out.println(data + " "); } public Link(char data){ this.data = data; }}public class Stack2 { Link head; public int size;//栈的大小 public int top;//栈顶元素的下标 public static char[] stackArray;//栈的容器 public void push(char data){ if(head == null){ head = new Link(data); }else{ Link node = new Link(data); node.next = head; head = node; } } public void pop(){ if(head == null){ throw new EmptyStackException(); }else{ char dat = head.data; head.show(); head = head.next; } } public int top(){ if(head == null){ return 0; }else{ return head.data; } } public boolean isEmpty(){ if(head == null) return true; return false; } public static void main(String[] args){ Stack2 stack = new Stack2(); stack.push('A'); stack.push('B'); stack.push('C'); stack.push('D'); stack.push('E'); stack.push('F'); stack.pop(); }}运行结果:
F
到此这篇关于Java栈的三种实现方式(完整版)的文章就介绍到这了,更多相关Java栈内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
ppt中的图形需要调整大小,该怎么调整呢?今天我们介绍三种调整图片大小的方法,请看下文详细介绍。软件名称:PowerPoint2017简体中文免费完整版软件大小
抖音点击看完整版的方法是: 1、打开抖音,找到带有完整版字样的视频,接着点击完整版图标。 2、进入后即可查看完整版的视频了。 抖音(TikTok)是由今日
抖音看完整版的方法是: 1、打开“抖音短视频”APP。 2、进入视频页面,点击“完整版”。 3、进入之后即可观看完整版。 抖音,是一款可以拍短视频的音乐
spring实现定时任务的方式有三种,分别是java自带的timer类、springtask和quartz三种。 本文只介绍spring自带的task和第三方
抖音看完整视频的方法是: 1、打开抖音。 2、找到带完整版的抖音。 3、点击完整版图标。 4、即可查看完整版视频了。抖音2016年9月上线,一直磨刀磨到