一、什么是栈
栈首先是一个特殊的线性表其特殊之处在于对于数据的插入和删除都在表的一端进行把固定的进行数据插入、删除的一端叫做栈顶另一端叫做栈底栈中的元素应该遵循后进先出的原则。
压栈对栈进行插入数据
出栈对栈进行删除数据 二、栈的基本操作
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;}}
四、栈的应用
括号的匹配、小型计算器的实现