java数据结构与算法:栈

这篇具有很好参考价值的文章主要介绍了java数据结构与算法:栈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口设计

public interface Stack<E> {
    int size();
    boolean isEmpty();
    E push(E e);
    E pop();
    E peek();
}

使用数组实现栈

代码:

public class SequentialListStack<E> implements Stack<E>{
    private SequentialList<E> sequentialList;

    public SequentialListStack(int capacity){
        sequentialList = new SequentialList<E>(capacity);
    }
    @Override
    public int size() {
        return sequentialList.size();
    }

    @Override
    public boolean isEmpty() {
        return sequentialList.isEmpty();
    }

    @Override
    public E push(E e) {
        sequentialList.addLast(e);
        return e;
    }

    @Override
    public E pop() {
        return sequentialList.removeLast();
    }

    @Override
    public E peek() {
        return sequentialList.get(size()-1);
    }
}

测试:

public class SequentialListStackTests {

    @Test
    public void testSize() {
       // 实例化SequentialListStack
       Stack<String> stack = new SequentialListStack<String>(
             5);
       assertTrue(stack.size() == 0);

       stack.push("Java");
       assertTrue(stack.size() == 1);
    }

    @Test
    public void testIsEmpty() {
       // 实例化SequentialListStack
       Stack<String> stack = new SequentialListStack<String>(
             5);
       assertTrue(stack.isEmpty());

       stack.push("Java");
       assertFalse(stack.isEmpty());
    }

    @Test
    public void testPush() {
       // 实例化SequentialListStack
       Stack<Integer> stack = new SequentialListStack<Integer>(
             5);
       stack.push(1);
       stack.push(2);
       stack.push(3);
       stack.push(4);
       stack.push(5);

       Throwable excpetion = assertThrows(
             IndexOutOfBoundsException.class, () -> {
                stack.push(6); // 抛异常
             });

       assertEquals("list is full",
             excpetion.getMessage());
    }

    @Test
    public void testPop() {
       // 实例化SequentialListStack
       Stack<String> stack = new SequentialListStack<String>(
             5);
       stack.push("Java");
       stack.push("C++");
       stack.push("C");

       assertEquals("C", stack.pop());

       assertTrue(stack.size() == 2);

    }

    @Test
    public void testPeek() {
       // 实例化SequentialListStack
       Stack<String> stack = new SequentialListStack<String>(
             5);
       stack.push("Java");
       stack.push("C++");
       stack.push("C");

       assertEquals("C", stack.peek());

       assertTrue(stack.size() == 3);
    }

}

使用单链表实现堆栈

链表头为堆栈顶

代码:

public class SinglyLinkedListStack<E> implements Stack<E> {
    private SinglyLinkedList<E> singlyLinkedList;

    public  SinglyLinkedListStack() {
        singlyLinkedList = new SinglyLinkedList<>();
    }
    @Override
    public int size() {
        return singlyLinkedList.size();
    }

    @Override
    public boolean isEmpty() {
        return singlyLinkedList.isEmpty();
    }

    @Override
    public E push(E e) {
        singlyLinkedList.addFirst(e);
        return e;
    }

    @Override
    public E pop() {
        return singlyLinkedList.removeFirst();
    }

    @Override
    public E peek() {
        return singlyLinkedList.get(0);
    }
}

测试:文章来源地址https://www.toymoban.com/news/detail-810082.html

public class SinglyLinkedListStackTests {

    @Test
    public void testSize() {
       // 实例化SinglyLinkedListStack
       Stack<String> stack = new SinglyLinkedListStack<String>();
       assertTrue(stack.size() == 0);

       stack.push("Java");
       assertTrue(stack.size() == 1);
    }

    @Test
    public void testIsEmpty() {
       // 实例化SinglyLinkedListStack
       Stack<String> stack = new SinglyLinkedListStack<String>();
       assertTrue(stack.isEmpty());

       stack.push("Java");
       assertFalse(stack.isEmpty());
    }

    @Test
    public void testPush() {
       // 实例化SinglyLinkedListStack
       Stack<Integer> stack = new SinglyLinkedListStack<Integer>();
       stack.push(1);
       stack.push(2);
       stack.push(3);
       stack.push(4);
       stack.push(5);

       assertTrue(stack.size() == 5);
    }

    @Test
    public void testPop() {
       // 实例化SinglyLinkedListStack
       Stack<String> stack = new SinglyLinkedListStack<String>();
       stack.push("Java");
       stack.push("C++");
       stack.push("C");

       assertEquals("C", stack.pop());

       assertTrue(stack.size() == 2);

    }

    @Test
    public void testPeek() {
       // 实例化SinglyLinkedListStack
       Stack<String> stack = new SinglyLinkedListStack<String>();
       stack.push("Java");
       stack.push("C++");
       stack.push("C");

       assertEquals("C", stack.peek());

       assertTrue(stack.size() == 3);
    }

}

到了这里,关于java数据结构与算法:栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java数据结构与算法----动态规划(背包篇)

    1.1.算法思路 0/1背包是动态规划、背包问题中最经典的问题啦!它主要的问题是: 给定n种物品、这n种物品的重量分别是,价值分别是 ,而你有一个容量为C的背包,请问如何求出所能拿的最大价值呢? 对于动态规划,我们先需要找到一条推导公式,然后确定边界: 我们设

    2024年02月07日
    浏览(50)
  • Java数据结构与算法:二叉搜索树

    Java数据结构与算法:二叉搜索树 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在计算机科学中,二叉搜索树(Binary Search Tree,简称BST)是一种常见的树形数据结构,它具有良好的查找和插入性能。每

    2024年01月24日
    浏览(44)
  • 【算法与数据结构】Java实现查找与排序

    也叫做折半查找,属于有序查找算法。 前提条件 :数组数据必须有序,从小到大,或者从大到小都是可以的。 如果是无序的,也可以先进行排序。 但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数

    2024年01月19日
    浏览(51)
  • 数据结构与算法(Java版) | 详解算法的时间复杂度

    下面我们用一个问题来引出算法的时间复杂度这一概念。 该问题是,怎么去衡量一个程序(或者算法)的执行时间呢?就拿我们刚刚讲的排序算法来说,排序算法这么多,你又如何知晓哪一个排序算法执行的时间谁长谁短呢? 要想搞清楚该问题,那我们就不得不知道度量一

    2024年02月05日
    浏览(47)
  • 0302Prim算法-最小生成树-图-数据结构和算法(Java)

    1.1 概述 1.1.1 算法描述 算法描述: 初始化最小生成树,只有一个起点; 每次将下一条连接树中顶点和其补集中顶点且权重最小的边(黑色表示)加入树中; 重复步骤中2,直至最小生成树中加入了V-1条边。 命题L。Prim算法能够得到任意加权连通图的最小生成树。 证明:有命

    2023年04月16日
    浏览(42)
  • Java面试知识点(全)-数据结构和算法

    Java面试知识点(全)https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 数组 数组的下标寻址十分迅速,但计算机的内存是有限的,故数组的长度也是有限的,实际应用当中的数据往往十分庞大;而且无序数组的查找最坏情况需要遍历整个数组;后来人们提出了二分查

    2024年02月05日
    浏览(62)
  • 【一起学数据结构与算法】Java实现双链表

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。 打印双链表非常简单,只需要单独创一个结点

    2024年02月22日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包