Java中如何实现和使用栈这一数据结构?
- 内容介绍
- 文章标签
- 相关推荐
本文共计740个文字,预计阅读时间需要3分钟。
栈是一种特殊的线性表,其特点是先进后出(FILO)。在栈中,数据的插入和删除操作都在表的一端进行,这一端被称为栈顶。栈的主要操作包括:
- 入栈(Push):将数据元素插入到栈顶。- 出栈(Pop):从栈顶移除数据元素。
栈的应用场景包括:
- 函数调用栈:在程序执行过程中,每次函数调用都会在栈上创建一个新的栈帧,用于存储局部变量和返回地址。- 表达式求值:在计算数学表达式时,栈可以用来存储操作数和运算符,以实现正确的运算顺序。- 括号匹配:在编译器中,栈可以用来检查括号是否正确匹配。
栈一、什么是栈栈首先是一个特殊的线性表其特殊之处在于对于数据的插入和删除都在表的一端进行把固定的进行数据插入、删 栈一、什么是栈
栈首先是一个特殊的线性表其特殊之处在于对于数据的插入和删除都在表的一端进行把固定的进行数据插入、删除的一端叫做栈顶另一端叫做栈底栈中的元素应该遵循后进先出的原则。
压栈对栈进行插入数据
出栈对栈进行删除数据 二、栈的基本操作
push入栈 pop 出栈 peek取栈顶元素
使用栈时首先要引用以下Java包
import java.util.Stack;
创建栈
Stack a new Stack();//泛型中填写相应的包装类
三、对于栈的实现
1使用顺序表实现
public class MyStack {private int[] data new int[100];private int size 0;//入栈public void push(int val){if(size data.length){//这里也可以进行扩容return;}data[size] val;size;}//出栈public Integer pop(){if (size 0){return null;}//栈顶元素就是最后一个元素int ret data[size-1];//删除元素size--;return ret;}//取栈顶元素public Integer peek(){if (size 0){return null;}return data[size-1];}}
2使用链表实现
class Node{int val;Node next;public Node(int val){this.val val;}}public class MyStack {//使用不带傀儡结点的链表//如果使用带傀儡结点的链表更方便private Node head null;//1.入栈public void push(int val){Node newNode new Node(val);//使用头插//由于是不带傀儡结点的链表所以需要判断头结点是空还是非空if (head null){head newNode;return;}newNode.next head;head newNode;}//2.出栈public Integer pop(){if (head null){return null;}if (head.next null){int ret head.val;head null;return ret;}int ret head.val;head head.next;return ret;}//3.取栈顶元素public Integer peek(){if(head null){return null;}return head.val;}}
四、栈的应用
括号的匹配、小型计算器的实现
本文共计740个文字,预计阅读时间需要3分钟。
栈是一种特殊的线性表,其特点是先进后出(FILO)。在栈中,数据的插入和删除操作都在表的一端进行,这一端被称为栈顶。栈的主要操作包括:
- 入栈(Push):将数据元素插入到栈顶。- 出栈(Pop):从栈顶移除数据元素。
栈的应用场景包括:
- 函数调用栈:在程序执行过程中,每次函数调用都会在栈上创建一个新的栈帧,用于存储局部变量和返回地址。- 表达式求值:在计算数学表达式时,栈可以用来存储操作数和运算符,以实现正确的运算顺序。- 括号匹配:在编译器中,栈可以用来检查括号是否正确匹配。
栈一、什么是栈栈首先是一个特殊的线性表其特殊之处在于对于数据的插入和删除都在表的一端进行把固定的进行数据插入、删 栈一、什么是栈
栈首先是一个特殊的线性表其特殊之处在于对于数据的插入和删除都在表的一端进行把固定的进行数据插入、删除的一端叫做栈顶另一端叫做栈底栈中的元素应该遵循后进先出的原则。
压栈对栈进行插入数据
出栈对栈进行删除数据 二、栈的基本操作
push入栈 pop 出栈 peek取栈顶元素
使用栈时首先要引用以下Java包
import java.util.Stack;
创建栈
Stack a new Stack();//泛型中填写相应的包装类
三、对于栈的实现
1使用顺序表实现
public class MyStack {private int[] data new int[100];private int size 0;//入栈public void push(int val){if(size data.length){//这里也可以进行扩容return;}data[size] val;size;}//出栈public Integer pop(){if (size 0){return null;}//栈顶元素就是最后一个元素int ret data[size-1];//删除元素size--;return ret;}//取栈顶元素public Integer peek(){if (size 0){return null;}return data[size-1];}}
2使用链表实现
class Node{int val;Node next;public Node(int val){this.val val;}}public class MyStack {//使用不带傀儡结点的链表//如果使用带傀儡结点的链表更方便private Node head null;//1.入栈public void push(int val){Node newNode new Node(val);//使用头插//由于是不带傀儡结点的链表所以需要判断头结点是空还是非空if (head null){head newNode;return;}newNode.next head;head newNode;}//2.出栈public Integer pop(){if (head null){return null;}if (head.next null){int ret head.val;head null;return ret;}int ret head.val;head head.next;return ret;}//3.取栈顶元素public Integer peek(){if(head null){return null;}return head.val;}}
四、栈的应用
括号的匹配、小型计算器的实现

