java 链表实现堆栈_使用单向链表的形式实现堆栈

本文介绍了如何使用Java中的单向链表实现堆栈,包括push()、peek()、pop()和display()等关键操作。通过示例代码展示了链表在堆栈操作中的灵活性和伸缩性。
摘要由CSDN通过智能技术生成

链表能够很好的实现堆栈,与数组相比,链表有更好的伸缩性。文章这里提供了有以下几个方法,入栈使用的是push(),返回栈顶元素是peek(),pop()表示返回栈顶且删除,display则是展示所有元素。isEmpty()盘算链表是否为空

/**

*@Author swyee

*@Date 17:44 2020/7/18

**/

import java.util.Scanner;

public class MyStack {

private Node root;

MyStack() { }

// 入栈操作

public void push(Object val)

{

Node node = new Node(val);

if(root==null){//判断是否有节点

root=node;

}else{

node.next=root;

root=node;

}

}

// 定义一个函数判断栈是否为空(链表是否为空)

public boolean isEmpty()

{

return root == null;

}

// 返回栈顶元素,但不删除

public Object peek()

{

if(isEmpty()) {

throw new RuntimeException("栈是空的!");

}

return root.value;

}

// 返回栈顶元素并删除

public void pop()

{

if(isEmpty()) {

throw new RuntimeException("栈是空的!");

}

root=root.next;

}

//展示所有元素

public void display()

{

for(Node n=root;n!=null;n=n.next){

System.out.print(n.value+" ");

}

}

}

// main方法

class stack {

public static void main(String[] args)

{

MyStack stackUsingLinkedlist = new MyStack();

System.out.println("push:3,5,6,4,3,8");

stackUsingLinkedlist.push(3);

stackUsingLinkedlist.push("aaa");

stackUsingLinkedlist.push(5);

stackUsingLinkedlist.push(6);

stackUsingLinkedlist.push(4);

stackUsingLinkedlist.push(3);

stackUsingLinkedlist.push(8);

System.out.println();

System.out.println("display()");

stackUsingLinkedlist.display();

System.out.println();

System.out.println("peek()");

Object peek = stackUsingLinkedlist.peek();

System.out.println(peek);

System.out.println("display()");

stackUsingLinkedlist.display();

System.out.println();

System.out.println("pop()");

stackUsingLinkedlist.pop();

System.out.println("display()");

System.out.println();

stackUsingLinkedlist.display();

}

}

//链表结构

class Node {

Object value;

Node next;

public Node(Object value) {

super();

this.value = value;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值