【算法通关村】第四关栈青铜挑战笔记

本文介绍了如何使用Java实现栈数据结构,包括基于数组(如LStack2)和链表(如LinkedListStack)的实现,涉及push、pop、peek和empty等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手写栈

基础操作

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());
     }
 }
 ​

经典

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值