算法导论示例-Stack

原创 2006年06月06日 22:21:00
/**
 * Introduction to Algorithms, Second Edition 
 * 10.1 Stacks
 * @author 土豆爸爸
 * 
 */
import java.util.EmptyStackException;

public class Stack {
    private int[] array;
    private int top = -1;
    
    /**
     * 构造函数,创建一个可以容纳size个元素的栈
     * @param size 栈的大小
     */
    public Stack(int size) {
        array = new int[size];
    }
    
    /**
     * 判断栈是否为空
     * @return 栈是否为空
     */
    public boolean isEmpty() {
        return top == -1;
    }
    
    /**
     * 将元素x压栈。压栈后栈顶指针加1。
     * @param x 待入栈元素
     */
    public void push(int x) {
        if(top == array.length -1) {
            throw new RuntimeException("Overflow");
        }
        array[++top] = x;
    }
    
    /**
     * 弹出栈顶元素。出栈后栈顶指针减1。
     * @return
     */
    public int pop() {
        if(isEmpty()) {
            throw new EmptyStackException();
        }
        return array[top--];
    }
}


import java.util.EmptyStackException;

import junit.framework.TestCase;

public class StackTest extends TestCase {
    public void testStack() {
        Stack s = new Stack(10);
        s.push(1);
        s.push(2);
        s.push(3);
        assertEquals(3, s.pop());
        assertEquals(2, s.pop());
        assertFalse(s.isEmpty());
        s.push(4);
        s.push(5);
        assertEquals(5, s.pop());
        assertEquals(4, s.pop());
        assertEquals(1, s.pop());
        assertTrue(s.isEmpty());
        
        try{
            s.pop();
            fail("pop应抛出异常");
        } catch(Exception e) {
            assertTrue(e instanceof EmptyStackException);
        }
    }
}

【CLRS】《算法导论》读书笔记(四):栈(Stack)、队列(Queue)和链表(Linked List)

栈(Stack) 维基百科: http://en.wikipedia.org/wiki/Stack_(abstract_data_type) 在栈中,被删除的是最近插入的元素:栈实现的是一...

算法导论------------栈(stack)简单的数组实现

栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO)。栈和队列的实现可以采用数组和链表进行实现。在标准模块库STL中有具体的应用,可以参考h...

链式哈希表(Hash Table)--算法导论示例

In computer science, a hash table is an associative array data structure that associates keys with v...

MIT算法导论-第7,8讲-哈希表

1.哈希函数的选择一个好的哈希函数H需要哪些特点:1.keys均匀的映射到表的槽内2.键值的分布特性应该不影响这种均匀性质选择的策略主要有两种:除法散列法 ,乘法散列法。(1)除法散列法: 定义has...

算法导论第七章总结:快速排序

算法导论第七章总结         对于包含 n 个数的输入数组来说,快速排序是一种最坏时间复杂度为 Θ(n2) 的排序算法。虽然最坏情况时间复杂度很差,但快速排序通常书实际应用中最好的选择,因为它...

算法导论-12-1-具有相同关键字元素的二叉查找树

题目: 相同关键字的存在,给二叉查找树的实现带来了一些问题。 a)当用TREE-INSERT将n个具有相同关键字的数据项插入到一棵初始为空的二叉查找树中时,该算法的渐近性能如何? 我们可以对TR...

算法导论 红黑树加入节点

RB-INSERT-FIXUP:加入一个新节点时可能出现的问题:1.被加入节点是红节点,且原红黑树为空,这时只要把节点x涂成黑色即可。2.被加入的红节点的父节点也是红节点,即z和p[z]都为红色,这就...

算法导论第三版第8章思考题

8-1a.因为对于每一种输入,不可能能够到达同一片叶子,所以一共有n!n!片子是可以到达的。其次因为输入完全随机,每种输入概率相等且到叶子结点的路径是固定的,这n!n!个叶子结点的概率也是相等的,为1...
  • obguy
  • obguy
  • 2016年03月03日 20:23
  • 1521

算法导论 第三版 动态规划之库存规划

15-11 题目:某公司的额定产能是每月生产m台设备,而如果每月生产超过m台,则需要额外雇佣劳动力,每多生产一台设备所需的雇佣成本为c。已知未来n个月每个月的需求为d[i],不同的月份需求不一样,但...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法导论示例-Stack
举报原因:
原因补充:

(最多只允许输入30个字)