package com.qiusongde.linkedlist; import java.util.Iterator; import java.util.NoSuchElementException; public class LinkedList<Item> implements Iterable<Item> { private Node<Item> first; //Node should be public static in this class //When…
1.2.1 package com.qiusongde; import edu.princeton.cs.algs4.Point2D; import edu.princeton.cs.algs4.StdDraw; import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.StdRandom; public class Point2DClient { public static void main(String[] ar…
1.1.1 private static void exercise111() { StdOut.println("1.1.1:"); StdOut.println((0+15)/2); StdOut.println(2.0e-6 * 100000000.1); StdOut.println(true && false || true && true); StdOut.println(); } 1.1.2 private static void exer…
1.将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. (可以参照第2的merge2List实现) 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists 易错点: (1)没考虑其中一个是空链表情况 (2)往前插入和往后插入的情况处…
链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链表. 链表分为单链表.双链表.循环链表.   一.单链表 插入:链表中插入一个节点的效率很高.向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点(见下图). 由上图可知,B.C之间插入D,三者之间的关系为 current为插入节点的前驱节点 current->next = new // B节点指向新节点D new->next = curr…
ubuntu命令行下java工程编辑与算法(第四版)环境配置 java 命令行 javac java 在学习算法(第四版)中的实例时,因需要安装配套的java编译环境,可是在编译java文件的时候总是出各种错误,特在此总结一下. ubuntu下java环境配置 由于网上教程比较多,而且也较全面,特此摆放一个链接,跟着此教程总就可以配置好oracle的java jdk,如果想更加省事,直接在命令行下键入java,会提示安装各种开源java jdk,只需要一个命令即可: sudo apt-get i…
第一步:配置Eclipse运行环境 Eclipse运行环境配置过程是很简单的,用过Eclipse进行java开发或学习的同学应该都很熟悉这个过程了. 配置过程: (1)系统环境:Windows7 64位 (2)下载JDK和Eclipse安装包,JDK下载地址,Eclipse下载地址 (3)安装JDK和Eclipse JDK安装过程很简单,一直下一步就可以了,安装路径可以根据自己喜好选择:Eclipse不需要安装,直接解压就可以用,最好是把eclipse.exe发送到桌面快捷方式,用的时候直接桌面…
1. 下载 1.1 JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html选择“Windows x64 180.51 MB jdk-8u51-windows-x64.exe”下载. 1.2 Eclipse http://www.eclipse.org/downloads/选择下载“Eclipse IDE for Java EE Developers”64位版(要与JDK的一致,JDK也是64位版) 2. 安装J…
算法(第四版)C#题解——2.1   写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 Sort 和 SortData,同样在 Github 上可以找到. 善用 Ctrl + F 查找题目. 习题&题解 2.1.1 题目 按照算法 2.1 所示轨迹的格式给出选择排序是如何将数组 E A S Y Q U E S T I O N 排序的. 解答 2.…
常见排序算法题(java版) //插入排序:   package org.rut.util.algorithm.support;   import org.rut.util.algorithm.SortUtil; /**  * @author treeroot  * @since 2006-2-2  * @version 1.0  */ public class InsertSort implements SortUtil.Sort{       /** (non-Javadoc)      *…
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso HandlerSet 处理程序链表类 这里使用的Set这个单词,Set是集合的意思,这里实质上是一个双向循环链表.这个类比较重要,这里会详细的介绍. HandlerSet类只有一个数据成员,就是HandlerDescriptor fHandlers;这是作为链表的头结点而存在的. HandlerSet的定义,代码…
 使用C++封装一个链表类LinkList.写出相应一个测试用例 链表需要提供 添加 修改删除 除重 合并 排序创建 销毁等接口. 不能调用库函数或者使用STL等类库 题目延伸***********逆置链表********** LinkNode.h #ifndef LINKNODE_H #define LINKNODE_H #include <iostream> class LinkNode { public: int m_idata; LinkNode* m_pnext; }; #end…
因为这个解法有点复杂,因此单独开一贴介绍. 那么这里就使用六个栈来解决这个问题. 这个算法来自于这篇论文. 原文里用的是 Pure Lisp,不过语法很简单,还是很容易看懂的. 先导知识——用两个栈模拟一个队列 如何使用两个栈来模拟一个队列操作? 这是一道很经典的题目,答案也有很多种,这里只介绍之后会用到的一种方法. 首先我们有两个栈,H 和 T,分别用作出队和入队用. 这样,入队操作等同于向 T 添加元素,T 的入栈操作只需要 O(1) 时间. 如果 H 不为空,出队操作等同于 H 弹栈,H…
排序算法总结(C语言版) 1.    插入排序 1.1     直接插入排序 1.2     Shell排序 2.    交换排序 2.1     冒泡排序 2.2     快速排序 3.    选择排序 3.1     直接选择排序 3.2     堆排序 4.    归并排序 4.1     二路归并排序 4.2     自然合并排序 5.    分布排序 5.1     基数排序 1.插入排序 1.1      直接插入排序 将已排好序的部分num[0]~num[i]后的一个元素num[i…
<算法>第四版 IDEA 运行环境的搭建 新建 模板 小书匠 在搭建之初,我是想不到会出现如此之多的问题.我看了网上的大部分教程,都是基于Eclipse搭建的,还没有使用IDEA搭建的教程.我相信许多读者跟我一样,在学习Java的时候没有使用过命令行编译的形式去运行Java代码,直接使用Eclipse工具去进行开发的,因此,当看到书中 % java BinarySerach xxx.txt < xxx.txt 的时候,不免有点不知所措.笔者现在使用的IDE是IDEA,因此是想要在IDEA…
1. [代码][C/C++]代码 /** * @todo    c版基于链表的插入排序 * @author  Koma **/#include<stdio.h>#include<stdlib.h> typedef struct node{    int data;    struct node *next;}LNode, *LinkList; /** * 创建并初始化一个带头节点的链表 **/LinkList init() {    LinkList p, r, list;   …
数组线性表类ArrayList 和链表类LinkedList 是实现List接口的两个具体类.ArrayList 数组储存元素,这个数组是动态创建的.如果元素个数超过了数组的容量,就创建一个更大的新数组,并将当前所有元素都复制到新数组中.LinkedList在一个链表中储存元素. 如果需要通过下标来随机访问元素,但是除了在末尾处之外,不能在其他位置插入或删除元素,那么使用ArrayList更高效. 需要在线性表任意位置上插入或删除元素,就应该选择LinkedList.线性表的大小可动态增大或减小…
上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据结构中将c++的语言特点表现出来.一开始也是不愿意读c++的数据结构,只是一种挑战心里,不想读着读着感觉自己太low了,c++的内容更加丰富,所以还得多多练习...... 头文件 #ifndef LIST_H #define LIST_H #include <iostream> template…
链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点组成的,它是一个递归结构,要么它是空的,要么它存在一个指向另外一个数据节点的引用. 链表,可以说是最基础的数据结构. 最简单的链表如下: package main import ( "fmt" ) type LinkNode struct { Data int64 NextNode *Li…
具体 源代码 案例查看github,持续更新中............ github地址:https://github.com/Master-fd/C-Algorithm 1. 二分法查找 2. 冒泡排序 3. 插入排序 4. 希尔排序 5. 选择排序 6. 快速排序 7. 单链表实现堆栈 8. 单链表实现队列 9. 普通单链表 10. 递归实现斐波拉契数列 11. 递归实现strlen 12. 循环链表 13. 求素数 14. 双向链表 15. 顺序表实现队列 16. 顺序表实现栈 17. 顺…
这次实现的是带头结点的单链表的初始化.遍历.创建.插入.删除.判断链表是否为空.求链表长度函数,编译环境是vs2013. 其中插入和删除函数中循环的条件目前还不太明白. #include<iostream> using namespace std; typedef int Status; typedef char Elemtype; //定义链表的存储结构,注意这里与算法的定义有一处不同,是定义结构体时就命名Lnode,说明*next的类型只要说是Lnode类型就可以 typedef stru…
1. package algorithms.ADT; /****************************************************************************** * Compilation: javac Bag.java * Execution: java Bag < input.txt * Dependencies: StdIn.java StdOut.java * * A generic bag or multiset, implement…
1. //Euclid’s algorithm public static int gcd(int p, int q) { if (q == 0) return p; int r = p % q; return gcd(q, r); } public static boolean isPrime(int N) { if (N < 2) return false; for (int i = 2; i * i <= N; i++) if (N % i == 0) return false; ret…
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https://alg4.ikesnowy.com/ 这一节内容可能会用到的库文件有 PriorityQueue,同样在 Github 上可以找到. 善用 Ctrl + F 查找题目. 习题&题解 2.4.1 解答 R R P O T Y I I U Q E U 优先队列的变化如下: 输入命令 优先队列 输出…
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更为方便的版本见:https://alg4.ikesnowy.com/ 这一节内容可能会用到的库文件有 Quick,同样在 Github 上可以找到. 善用 Ctrl + F 查找题目. 习题&题解 2.3.1 解答 2.3.2 解答 2.3.3 解答 N / 2 在快速排序中,一个元素要被交换,有以下两种情况 1.该元素是…
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更为方便的版本见:https://alg4.ikesnowy.com 这一节内容可能会用到的库文件有 Merge,同样在 Github 上可以找到. 善用 Ctrl + F 查找题目. 习题&题解 2.2.1 解答 2.2.2 解答 2.2.3 解答 2.2.4 解答 是的,必须要两个子数组都有序时归并才能得到正确结果.如果…
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 Generics,同样在 Github 上可以找到. 善用 Ctrl + F 查找题目. 习题&题解 1.3.1 解答 首先是 FixedCapacityStackOfStrings 类,官方 JAVA 版本参考:FixedCapacityStackOfStrings.java IsFull()…
总述:排序是指将元素集合按规定的顺序排列.通常有两种排序方法:升序排列和降序排列.例如,如整数集{6,8,9,5}进行升序排列,结果为{5,6,8,9},对其进行降序排列结果为{9,8,6,5}.虽然排序的显著目的是排列数据以显示它,但它往往可以用来解决其他的问题,特别是作为某些成型算法的一部分. 总的来说,排序算法分为两大类:比较排序 和 线性时间排序. 比较排序依赖于比较和交换来将元素移动到正确的位置上.它们的运行时间往往不可能小于O(nlgn). 对于线性时间排序,它的运行时间往往与它处理…
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而从北京到济南有好多条道路,那么最短的那一条就是北京到济南的最短路径,也是我们今天要求的最短路径. 因为最短路径是基于有向图来计算的,所以我们还是使用上几篇关于图的博客中使用的示例.不过我们今天博客中用到的图是有向图,所以我们要讲上篇博客的无向图进行改造,改成有向图,然后在有向图的基础上给出最小生成树…