
算法4
算法第四版习题题解
dwwzone
一个90后入门程序员,在读研究生,学习方向是java,欢迎大家关注我的个人公众号 0x咖啡宝贝 希望我们一起学习一起进步
展开
-
删除第K个元素 泛型一般队列 基于数组和链表的实现
public class GeneralizedQueue< Item>支持如下APIisEmpty()insert(Item item) 添加一个元素delete(int k) 删除并返回最早插入的第k个元素方法一 链表实现public class GeneralizedQueue <Item>{ private class Node { ...原创 2019-10-17 20:21:17 · 392 阅读 · 0 评论 -
Josephus问题--N个人通过循环报数决定存活者--基于数组的实现
在这个问题中,N个人决定通过以下方式减少生存的人数,直至只剩下最后一人。他们围坐成一圈(位置记为0到N-1)并从第一个人开始从1报数,报到M的人会被杀死,然后从下一个存活的人又从1开始报数,直到最后一个人留下来。传说中Josephus找到了不会被杀死的位置。编写一个程序,从命令行接收N和M并打印出人们被kill的顺序,同时也找到了幸存者的位置。方法一 数组解法public class Jo...原创 2019-10-17 19:16:27 · 217 阅读 · 0 评论 -
随机队列
public class RandomQueue< Item >随机队列能够存储一组元素并支持如下APIRandomQueue() 创建一个空队列isEmpty()判断队列是否为空enqueue(Item item) 添加一个元素dequeue()删除并返回一个随机元素sample() 随机返回一个元素,不删除方法1.使用动态数组存储数据2.删除元素时,随机交换某个元...原创 2019-10-16 19:55:27 · 522 阅读 · 0 评论 -
随机背包---存储一组元素并进行随机访问
背包可以存储一组数据,随机背包要求每次迭代,所有N!种排列出现的概率相等。方法:用数组保存一组元素,并在迭代器中的构造函数中随机打乱他们的顺序:此时的打乱并非将原数组中的元素重新排列,而是使用一个新数组存储打乱的下标,并用新数组元素的顺序去遍历原数组支持如下API1.RandomBag()2.isEmpty()3.size()4.add(Item item)代码import e...原创 2019-10-15 20:59:25 · 188 阅读 · 0 评论 -
Deque--双向队列,支持同时在两端添加或删除元素--基于双向链表或动态数组的实现
支持以下APIisEmpty() 判断队列是否为空size() 节点数量pushLeft() 左端插入节点pushRight() 右端插入节点popLeft() 左端删除节点popRight() 右端删除节点代码import java.util.Iterator;/** * @author 鯉伴MAY * @param <Item> */public cla...原创 2019-10-14 20:59:59 · 370 阅读 · 0 评论 -
Steque--以栈为目标的队列--基于链表实现
是一种支持push,pop,enqueue操作的数据类型。push和pop都是对队列同一端的操作,enqueue和push对应,但是操作的是队列的另一端和栈的思想基本一致,但是多维护一个指向栈底(也就是链表尾部)的指针,方便进行enqueue操作/** * @author 鯉伴MAY * @param <Item> 泛型 */public class Steque <...原创 2019-10-14 20:21:13 · 391 阅读 · 0 评论 -
算法4练习 补全左括号问题--双栈
问题描述输入例如 1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) ),程序应该输出 ( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) )思路此题思路跟计算式中序变后序相似,采用双栈的做法,数字一个栈(String栈),运算符一个栈(Character栈),读到数字,则压入数字栈,读到运算符,则压入运算符栈。读到右括号时:1.从数字栈中弹出两个...原创 2019-09-04 09:23:39 · 352 阅读 · 0 评论 -
链表反转的两个方法(迭代和递归)
迭代方法记录链表中的三个连续节点:reverse ,first,second。在每轮迭代中,从原链表中提取first并将它插入逆链表的开头。一直保持first指向原链表剩余节点的首节点,second指向原链表剩余节点的第二个节点,reverse指向逆链表的首节点public Node reverse(Node x) { Node first = x; Node reverse = null...原创 2019-10-09 20:35:25 · 125 阅读 · 0 评论 -
使用嵌套类DoubleNode实现双向链表
每一个节点都含有指向前驱节点的引用pre每一个节点都含有指向后继节点的引用next实现以下功能:1.在表头插入节点2.在表尾插入节点3.从表头删除节点4.从表尾删除节点5.从指定节点之前插入新节点6.从指定节点之后插入新节点7.删除指定节点8.输出链表代码/*** @author 鯉伴MAY* @param <Item> 泛型*/public class...原创 2019-10-10 09:30:05 · 450 阅读 · 0 评论