算法第四版1.3节部分练习题答案

Posted yahuian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第四版1.3节部分练习题答案相关的知识,希望对你有一定的参考价值。

1.3.4 编写一个Stack的用例Parentheses,从标准输入中读取一个文本流并使用栈判定其中的括号是否配对完整。例如,对于[ ( ) ] { } { [ ( ) ( ) ] ( ) } 程序应该打印true,对于[ ( ] )则打印false。

技术图片
public class Matching
{
    public static boolean isBalanced(String s)
    {
        LinkedListStack<Character> myStack = new LinkedListStack<Character>();
        for (int i = 0; i < s.length(); i++)
        {
            if(s.charAt(i)==‘[‘) myStack.push(s.charAt(i));
            if(s.charAt(i)==‘(‘) myStack.push(s.charAt(i));
            if(s.charAt(i)==‘{‘) myStack.push(s.charAt(i));
            
            if(s.charAt(i)==‘]‘)
            {
                if(myStack.isEmpty()) return false;
                if(myStack.pop()!=‘[‘) return false;
            }
            
            if(s.charAt(i)==‘)‘)
            {
                if(myStack.isEmpty()) return false;
                if(myStack.pop()!=‘(‘) return false;
            }
            
            if(s.charAt(i)==‘}‘)
            {
                if(myStack.isEmpty()) return false;
                if(myStack.pop()!=‘{‘) return false;
            }
        }
        return myStack.isEmpty();
    }

    public static void main(String[] args)
    {
        String s1="[()]{}{[()()]()}";
        String s2="[(])";
        System.out.println(Matching.isBalanced(s1));
        System.out.println(Matching.isBalanced(s2));
    }
}
1.3.4

1.3.5 启发:求整数的二进制表示时用“除2取余法”时要特别注意二进制的高位和低位,本例借用了栈的“先进后出”特性来确认高位和地位。

技术图片
Stack<Integer> s = new Stack<Integer>();
while (n > 0) 
{
   s.push(n % 2);
   n = n / 2;
}
while (!s.isEmpty())
    System.out.print(s.pop());
1.3.5

 1.3.9 编写一段程序,从标准输入得到一个缺少左括号的表达式并打印补全括号之后的中序表达式。例如,给定输入:1+2)*3-4)*5-6)))你的程序应该输入:((1+2)*((3-4)*(5-6)))

技术图片
public class EX_1_3_9
{
    public static void main(String[] args)
    {
        LinkedListStack<String> dataStack = new LinkedListStack<String>(); // 数据栈
        LinkedListStack<String> operStack = new LinkedListStack<String>(); // 运算符栈

        String s = "1+2)*3-4)*5-6)))";

        // 该算法有个前提就是输入的字符串是正确的表达式

        for (int i = 0; i < s.length(); i++)
        {
            // 如果是操作符,则将其压入操作符栈
            if (s.charAt(i)==‘+‘ || s.charAt(i)==‘-‘ || s.charAt(i)==‘*‘ || s.charAt(i)==‘/‘)
            {
                operStack.push(String.valueOf(s.charAt(i)));
            }
            // 如果是右括号,则从数据栈中弹出两个数,从运算符栈中弹出一个运算符,补全左括号后,
            // 拼接为一个整体的字符串压入数据栈中
            else if (s.charAt(i)==‘)‘)
            {
                String oper = operStack.pop();
                String second = dataStack.pop();
                String first = dataStack.pop();
                String whole = ("(" + first + oper + second + ")");
                dataStack.push(whole);
            }
            // 如果是数据,则压入数据栈中
            else
            {
                dataStack.push(String.valueOf(s.charAt(i)));
            }
        }
        
        while(!dataStack.isEmpty())
        {
            System.out.print(dataStack.pop());
        }
    }
}
1.3.9

以上是关于算法第四版1.3节部分练习题答案的主要内容,如果未能解决你的问题,请参考以下文章

练习代码——《算法(第四版)》

管理运筹学第四版课后答案韩伯棠

数学物理方法 高教 第四版 课后习题答案

算法导论第四版学习——习题五Kd-Tree

概率论与数理统计 第四版 课后习题答案 习题解析

马克思主义基本原理概论》学生辅学读本(第四版)习题答案