数据结构——栈(顺序栈)——Java

简介: 数据结构——栈(顺序栈)——Java

 

public class SqStackClass<E> {                       //顺序栈泛型类
    final int initcapacity = 10;                     //顺序栈的初始容量(常量)
    private int capacity;                            //存放顺序栈的容量
    private E[] data;                                //存放顺序栈中元素
    private int top;                                 //存放栈顶指针
    private int num;                                 //记录元素个数
    public SqStackClass() {                      //构造方法,实现data和size的初始化
        data = (E[]) new Object[initcapacity];        //强制转换为E类型数组
        capacity = initcapacity;
        top = -1;
    }
    private void updatecapacity(int newcapacity) {    //改变顺序栈的容量为newcapacity
        E[] newdata = (E[]) new Object[newcapacity];
        for (int i = 0; i < top; i++) {                       //复制原来的元素
            newdata[i] = data[i];
        }
        capacity = newcapacity;                        //设置新容量
        data = newdata;                                //仍由data标识数组
    }
    /**
     * 栈的基本运算算法
     */
    public boolean isEmpty() {                         //判断栈是否为空
        return top == -1;
    }
    public void push(E e) {                         //元素e进栈
        if (top == capacity - 1) {                       //顺序栈空间满时倍增容量
            updatecapacity(2 * (top + 1));
        }
        top++;                                        //栈顶指针增1
        data[top] = e;
        num++;                                       //元素+1
    }
    public E pop() {                                    //出栈操作栈顶
        if (isEmpty()) {
            throw new IllegalArgumentException("栈空");
        }
        E e = (E) data[top];
        top--;
        if (top + 1 > initcapacity && top + 1 == capacity / 4) { //满足条件则容量减半
            updatecapacity(capacity / 2);
        }
        num--;                                              //元素-1
        return e;
    }
    public E peek() {                                 //取栈顶元素操作
        if (isEmpty()) {
            throw new IllegalArgumentException("栈空");
        }
        return (E) data[top];
    }
    public String toString() {                        //将栈转换为字符串,不是基本运算,仅仅调试用
        String ans = "";
        for (int i = 0; i <= top; i++) {
            ans += data[i] + " ";
        }
        return ans;
    }
    //返回元素长度
    public int size() {
        return num;
    }
}

image.gif

目录
相关文章
|
22天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
104 9
|
13天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
21 1
|
1月前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
44 1
|
1月前
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
82 2
|
15天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
16天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
36 6
|
21天前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
18天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
20天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
47 4
|
25天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
下一篇
无影云桌面