关于栈,你需要知道这些

mac2025-10-19  5

分别用四个字描述栈和队列 栈:后进先出 队列:先进先出

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 它的三个核心操作

入栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。(最后吃的在肚子上面)出栈:栈的删除操作叫做出栈。出数据在栈顶。(最后吃的先吐)取栈顶元素:把栈顶的元素取出来看看。

顺序表实现一个栈(使用一个数组来实现栈)

package package11_1; public class MyStack { private int[] arrays = new int[100]; private int size = 0; //入栈 public void push(int x){ arrays[size] = x; size++; } //出栈,返回这个元素值 public Integer pop(){ if(size == 0){ return null; } Integer ret = arrays[size - 1]; size--; return ret; } //取栈顶元素 public Integer peek(){ if (size == 0){ return null; } return arrays[size - 1]; } //判断是否为空 public boolean isEmpty(){ return size == 0; } public int size(){ return size; } }

用链表来实现

package package11_2; public class MyStack2 { //后进先出 private Node head = null; private int size = 0; //入栈 public void push(int x){ Node newNode = new Node(x); if(head == null){ //空栈 head = newNode; size++; return; } newNode.next = head; head = newNode; size++; } //出栈 public Integer pop(){ if(head == null){ return null; } Integer ret = head.val; head = head.next; size--; return ret; } //取栈顶元素 public Integer peek(){ if(head == null){ return null; } return head.val; } public boolean isEmpty(){ return size == 0; } public static void main(String[] args) { MyStack2 myStack2 = new MyStack2(); myStack2.push(1); myStack2.push(2); myStack2.push(3); myStack2.push(4); while (!myStack2.isEmpty()){ Integer cur = myStack2.peek(); System.out.println(cur); myStack2.pop(); } } }
最新回复(0)