Java数据结构与算法之栈(Stack)实现

8 篇文章 0 订阅
3 篇文章 0 订阅

前言
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈图解
在这里插入图片描述

Java代码实现

public class Stack {
	private int maxSize;
	
	private long[] arr;
	
	private int top;
	
	// 初始化栈大小
	public Stack(int size) {
		maxSize = size;
		arr = new long[maxSize];
		top = -1;
	}
	
	// 入栈
	public void push(long value){
		arr[++top]=value;
	}
	
	// 出栈
	public long pop() {
		return arr[top--];
	}
	
	// 栈顶值
	public long peek() {
		return arr[top];
	}
	
	// 判空
	public boolean isEmpty() {
		return (top == -1);
	}
	
	// 判断栈是否满了
	public boolean isFull() {
		return (top == maxSize - 1);
	}
	
}


public static void main(String[] args) {
        Stack stack = new Stack(10);
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);

        while(!ms.isEmpty()) {
            System.out.println(stack.pop());
        }

}

程序运行结果:
在这里插入图片描述

扫二维码关注博主微信公众号👇
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Stack)是一种常见的数据结构,它是一种只允许在一端进行插入和删除操作的线性表,这一端被称为顶。的特点是后进先出(Last-In-First-Out,简称 LIFO),即最后压入的元素最先弹出。 在 Java 中,可以使用数组或链表来实现。下面分别介绍数组和链表实现的方法。 1. 数组实现 数组实现时,需要定义一个数组和一个指针 top,top 指向顶。中的元素从数组的末尾开始存储,每当有一个元素入时,top 指针加 1;每当有一个元素出时,top 指针减 1。 以下是一个基于数组实现的示例代码: ```java public class ArrayStack { private int[] stack; // 数组 private int top; // 顶指针 public ArrayStack(int size) { stack = new int[size]; top = -1; // 初始化顶指针为 -1 } // 判断是否为空 public boolean isEmpty() { return top == -1; } // 判断是否已满 public boolean isFull() { return top == stack.length - 1; } // 入 public void push(int data) { if (isFull()) { System.out.println("已满,无法入。"); return; } stack[++top] = data; } // 出 public int pop() { if (isEmpty()) { System.out.println("为空,无法出。"); return -1; } return stack[top--]; } // 获取顶元素 public int peek() { if (isEmpty()) { System.out.println("为空,无法获取顶元素。"); return -1; } return stack[top]; } } ``` 2. 链表实现 链表实现时,需要定义一个链表头节点和一个指针 top,top 指向顶。每当有一个元素入时,该元素成为新的头节点,其 next 指针指向原来的头节点;每当有一个元素出时,头节点指针向下移动一个位置。 以下是一个基于链表实现的示例代码: ```java public class LinkedStack { private Node top; // 顶指针 public LinkedStack() { top = null; // 初始化顶指针为 null } // 判断是否为空 public boolean isEmpty() { return top == null; } // 入 public void push(int data) { Node newNode = new Node(data); newNode.next = top; top = newNode; } // 出 public int pop() { if (isEmpty()) { System.out.println("为空,无法出。"); return -1; } int data = top.data; top = top.next; return data; } // 获取顶元素 public int peek() { if (isEmpty()) { System.out.println("为空,无法获取顶元素。"); return -1; } return top.data; } private class Node { private int data; private Node next; public Node(int data) { this.data = data; this.next = null; } } } ``` 以上是两种常见的实现方法,它们在效率和空间占用上略有差别,具体实现应根据具体情况选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值