手写栈
基础操作
push():增加一个元素
pop():弹出元素
peek():显示栈顶元素,但是不出栈
empty():判断栈是否为空
基于数组实现栈
top有得地方指向栈顶元素,有的地方指向栈顶再往上的一个空单位。面试的时候直接问面试官,top指向哪里。本文采用指向栈顶空位置。
top先将栈顶元素取出,然后再执行top--。
采用顺序表实现的的栈,内部以数组为基础,实现对元素的存取操作。在应用中还要注意每次入栈之前先判断栈的容量是否够用,如果不够用,可以进行扩容。
基于链表实现栈%%%
public class LStack2<T> { public class node<T>{ T val; node next; } public node<T> head; public LStack2() { head=null; } public void push(T t){ if(t==null){ System.out.println("值不能为空"); } if(head==null){ head = new node<>(); head.val=t; head.next=null; }else{ node<T> tmp=head; //先保存头 //头插法 head=new node<>(); head.val=t; head.next=tmp; } } public T pop(){ if(head==null){ return null; } T t=head.val; head=head.next; return t; } public T peek(){ if(head==null){ return null; } T t=head.val; return t; } public boolean isEmpty(){ if(head==null) return true; else return false; } public static void main(String[] args) { LStack2<Integer> stack = new LStack2<>(); System.out.println(stack.isEmpty()); stack.push(1); stack.push(2); stack.push(3); System.out.println(stack.peek()); System.out.println(stack.pop()); System.out.println(stack.isEmpty()); } }
package com.yugutou.charpter4_stack.level1; import java.util.LinkedList; /** * 基于Java的LinkedList来实现栈 * @param <T> */ public class LinkedListStack<T> { private LinkedList<T> ll = new LinkedList<>(); //入栈 public void push(T t) { ll.addFirst(t); } //出栈 public T pop() { return ll.removeFirst(); } //栈顶元素 public T peek() { T t = null; //直接取元素会报异常,需要先判断是否为空 if (!ll.isEmpty()) t = ll.getFirst(); return t; } //栈空 public boolean isEmpty() { return ll.isEmpty(); } public static void main(String[] args) { LinkedListStack<String> stack = new LinkedListStack(); System.out.println(stack.isEmpty()); System.out.println(stack.peek()); stack.push("java"); stack.push("is"); stack.push("beautiful"); System.out.println(stack.peek()); System.out.println(stack.pop()); System.out.println(stack.isEmpty()); } }