《算法》第四版(习题1.3.6,1.3.7,1.3.8,1.3.9,1.3.10)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hjKYvyQY-1581767731503)(/img/Algorithms4/200215-P1-3-06-P1-3-10/head.jpg)]

Preface

在学习《算法》第四版中,记录自己做的习题1.3.6,1.3.7,1.3.8,1.3.9,1.3.10的答案,若有错误欢迎提醒。
可以去看看我的GitHub,里面有我的代码和测试,记得star哦!

习题1.3.6

题目描述

下面这段代码对队列q进行了什么操作?

代码


	package chapter1;
	
	import edu.princeton.cs.algs4.Queue;
	import edu.princeton.cs.algs4.Stack;
	
	/**   
	*    
	* 项目名称:Algorithms4   
	* 类名称:P1_3_06   
	* 类描述:练习1.3.06,判断代码的作用   :反转队列q中所有元素的顺序
	* 创建人:bbbdbbb   
	* 创建时间:2020年2月3日 下午3:56:15   
	* @version        
	*/
	public class P1_3_06 {
	
		public static void main(String[] args) {
			Queue<String> q = new Queue<String>();
			for(int i=0;i<10;i++){
				q.enqueue(""+i);
			}
			System.out.print("程序开始前队列q中的元素:");
			for(String s : q){
				System.out.print(s+"  ");
			}
			
			Stack<String> stack = new Stack<String>();
			while(!q.isEmpty()){
				stack.push(q.dequeue());
			}
			while(!stack.isEmpty()){
				q.enqueue(stack.pop());
			}
			System.out.print("\n程序结束后队列q中的元素:");
			for(String s : q){
				System.out.print(s+"  ");
			}
			
		}
	
	}

运行结果截图

在这里插入图片描述

习题1.3.7

题目描述

为Stack添加一个方法peek(),返回栈中最近添加的元素(而不是弹出)

代码

	package chapter1;
	
	/**   
	*    
	* 项目名称:Algorithms4   
	* 类名称:P1_3_07   
	* 类描述:练习1.3.07,为Stack(算法1.2 用链表实现的栈)添加一个方法peek(),
	* 		返回栈中最近添加的元素(而不弹出它)
	* 创建人:bbbdbbb   
	* 创建时间:2020年2月3日 下午4:12:06   
	* @version        
	*/
	public class P1_3_07 {
		
	//    public Item peek() {
	//        if (isEmpty()) throw new NoSuchElementException("Stack underflow");
	//        return first.item;
	//    }
		
	}

习题1.3.8

题目描述

给定以下输入,给出DoublingStackOfStrings的数组的内容和大小。
it was - the best - of times - - - it was - the - -

代码

	package chapter1;
	
	import collection.ResizingArrayStack;
	import edu.princeton.cs.algs4.StdIn;
	import edu.princeton.cs.algs4.StdOut;
	
	/**   
	*    
	* 项目名称:Algorithms4   
	* 类名称:P1_3_08   
	* 类描述:练习1.3.08,给定以下输入,给出DoublingStackOfStrings的数组的内容和大小。   
	* 		it was - the best - of times - - - it was - the - -
	* 创建人:bbbdbbb   
	* 创建时间:2020年2月3日 下午4:38:58   
	* @version        
	*/
	public class P1_3_08 {
		//书上并没有看到DoublingStackOfStrings的实现代码,但根据英文名称可以看出:
		//	这是一个栈的实现类,栈的容量成倍的增加和减少,这不就是P88算法1.1ResizingArrayStack嘛?
		public static void main(String[] args) {
			ResizingArrayStack<String> s = new ResizingArrayStack<>();
			while(!StdIn.isEmpty()){
				String item = StdIn.readString();
				if(!item.equals("-")){
					s.push(item);
					StdOut.println("\n\n输入:"+item);
					StdOut.println("栈的长度"+s.size());
					StdOut.print("栈中的内容:");
					for(String str : s){
						StdOut.print(str+"  ");
					}
				}
				else if(!s.isEmpty()){			
					s.pop();
					StdOut.println("\n\n输入:"+item);
					StdOut.println("栈的长度"+s.size());
					StdOut.print("栈中的内容:");
					for(String str : s){
						System.out.print(str+"  ");
					}
				}
				
			}
			StdOut.println("\n剩下的元素数量:"+s.size());
		}
	
	}

运行结果截图

设置标准输入:
在这里插入图片描述
文件内容:
在这里插入图片描述
输出:
在这里插入图片描述

习题1.3.9

题目描述

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

代码

	package chapter1;
	
	import edu.princeton.cs.algs4.Stack;
	import edu.princeton.cs.algs4.StdIn;
	import edu.princeton.cs.algs4.StdOut;
	
	/**   
	*    
	* 项目名称:Algorithms4   
	* 类名称:P1_3_09   
	* 类描述: 练习1.3.09,编写一段程序,从标准输入得到一个缺少左括号的表达式,
	* 		并打印在出补全括号之后的中序表达式。
	* 创建人:bbbdbbb   
	* 创建时间:2020年2月3日 下午8:26:29   
	* @version        
	*/
	public class P1_3_09 {
	
		public static void main(String[] args) {
			Stack<String> number = new Stack<>();//存储算式中的数字
			Stack<String> operator = new Stack<>();//存储算式中的运算符
	
			while(!StdIn.isEmpty()){
				String item = StdIn.readString();
				System.out.println(item);
				if(Character.isDigit(item.charAt(0))){//如果item是数字0~9,压入number栈
					number.push(item);				
				}else if("+".equals(item) || "-".equals(item) || "*".equals(item) || "/".equals(item)){
					//如果item是运算符,压入operator栈
					operator.push(item);
				}else if(")".equals(item) && number.size()>=2 && operator.size()>=1){//如果item是')'
					String second = number.pop();
					String first = number.pop();
					String newBracket = "("+first+operator.pop()+second+")";
					number.push(newBracket);
					
					System.out.println("打桩: 1新产生的括号表达式为 "+newBracket);
					
				}else{
					//输入数据不能够成一个完整的括号表达式
					System.out.println("数据错误!!!");
				}
				
			}
			if(number.size()==1){
				System.out.print("结果:"+number.pop());
			}
	
		}
	
	}

运行结果截图

设置标准输入同上。

输出:
在这里插入图片描述

习题1.3.10

题目描述

编写一个过滤器InfixToPostfix,将算术表达式由中序表达式转为后序表达式

代码

	package chapter1;
	
	/**   
	*    
	* 项目名称:Algorithms4   
	* 类名称:P1_3_10   
	* 类描述: 练习1.3.10,编写一个过滤器 InfixToPostfix,将算术表达式由中序表达式转为后序表达式 
	* 		参考博客 https://www.jianshu.com/p/a052eb2806a1
	* 创建人:bbbdbbb   
	* 创建时间:2020年2月4日 下午5:08:51   
	* @version        
	*/
	public class P1_3_10 {
	
		public static void main(String[] args) {
	//		package collection;
	//
	//		import edu.princeton.cs.algs4.Stack;
	//		import edu.princeton.cs.algs4.StdIn;
	//		import edu.princeton.cs.algs4.StdOut;
	//
	//		public class InfixToPostfix {
	//		    public static void main(String[] args) {
	//		        Stack<String> stack = new Stack<String>();
	//		        while (!StdIn.isEmpty()) {
	//		            String s = StdIn.readString();
	//		            if      (s.equals("+")) stack.push(s);
	//		            else if (s.equals("-")) stack.push(s);
	//		            else if (s.equals("*")) stack.push(s);
	//		            else if (s.equals("/")) stack.push(s);
	//		            else if (s.equals(")")) StdOut.print(stack.pop() + " ");
	//		            else if (s.equals("(")) StdOut.print("");
	//		            else                    StdOut.print(s + " ");
	//		        }
	//		        StdOut.println();
	//		    }
	//		}
	
		}
	
	}

运行结果截图

设置标准输入同上。

输出:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值