栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据结构之栈

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构之栈

什么是栈

通俗来说栈就是一个操作受限的线性表

  • 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则
  • 压栈(push)就是数据入栈的操作,就是数据放入栈顶
  • 出栈 (pop)  就是数据出栈的操作,就是将栈顶元素取出
  • 可以把这种栈看作是水杯,我们最开始倒的水在最下面,只能最后喝

 例子

栈的应用
  1. 无处不在的撤销操作,比如编译器中ctrl+z返回上一步,运用的就是栈
  2. 浏览器中返回上一个网页,也用的是栈
  3. 操作系统栈:程序在执行的时候,将不停的将函数出栈入栈,用的也是栈这个结构 
栈的实现 

栈的实现非常简单,但是应用很广

首先栈是一个线性表,所以可以通过数组或者是链表实现,链表实现的叫链式栈,数组实现的叫顺序栈

链表的几个重要操作
  • push(E e)向栈中添加元素 
  • E pop()取出栈顶元素
  • E peek()只查看栈顶元素,不取出

代码实现(顺序栈的实现)

package MyStack;

import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;


public class MyStack {
    private int size;//记录栈中元素个数
    private List Stack=new ArrayList<>();
    //基于动态数组实现的栈

    
    public void push(E e){
        Stack.add(e);
        size++;
    }

    
    public E pop(){
        if (isEmpty()){
            throw new NoSuchElementException("栈为空,不能出栈");
        }else {
            E val=Stack.remove(size-1);
            size--;
            return val;
        }
    }
    public E peek(){
        if (isEmpty()){
            throw new NoSuchElementException("栈为空,不能查看");
        }else {

            return Stack.get(size-1);
        }
    }
    public String toString(){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for (int i = 0; i < size; i++) {
            sb.append(Stack.get(i));
            if (i!=size-1){
                sb.append(",");
            }
        }
        sb.append("] top");
        return sb.toString();
    }
    
    public boolean isEmpty(){
        return size==0;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880940.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号