java数据结构与算法(一)
1、数据结构概念
所谓的数据结构是数据之间的关系,都是为了提高程序效率而设计的。
分为逻辑关系和物理关系两种。
逻辑关系:人为的一种逻辑思维的认为。
(1)集合:在一个范围内有多个数据,数据之间没有关系
(2)线性:1对1的关系
(3)树型:1对多的关系
(4)图:多对多
物理关系:内存存储的一种关系。
(1)顺序存储:数组方式
(2)链式存储:链表方式
2、算法
(1)大数据的运算
例如:很大的阶层运算,1*2*3*...*50=?
public class DataStratum01 {
public static void main(String[] args) {
// 10的阶层计算
int n = 50;
int[] datas = new int[100];
datas[datas.length - 1] = 1;
for (int i = 1; i <= n; i++) {
cal(datas, i);
}
for (int i = 0; i < datas.length; i++) {
System.err.print(datas[i]);
}
}
/* 计算阶层 */
public static int[] cal(int[] datas, int num) {
for (int i = 0; i < datas.length; i++) {
datas[i] *= num;
}
for (int i = datas.length - 1; i > 0; i--) {
int temp = datas[i] / 10;
if (temp > 0) {
datas[i - 1] += temp;
}
datas[i] %= 10;
}
return datas;
}
}
(2)插入排序运算
public class DataInsertSort {
public static void main(String[] args) {
// 插入排序:方法一,用到了三个循环
int[] datas = {7,3,8,2,1,9,4,5};
for (int i = 1; i < datas.length; i++) {
if (datas[i] < datas[i - 1]) { // 当发现i的位置小于i-1的位置的时候
for (int j = 0; j < i; j++) {
if (datas[i] < datas[j]) { // 当发现i的位置小于j的位置时候
int temp = datas[i];
for (int k = i - 1; k >= j; k--) { // k位置的数据往后移动
datas[k + 1] = datas[k];
}
datas[j] = temp;
}
}
}
}
for (int i = 0; i < datas.length; i++) {
System.out.print(datas[i]);
}
}
}
结果:
(3)查找数据
例如:二分查找法
public class DataBinarySearch {
// 二分查找法
public static void main(String[] args) {
int[] datas = {2, 4, 7, 8, 10, 12, 16, 19, 20};
int num = 1;
int start = 0; // 开始位置
int end = datas.length - 1; // 末尾位置
int centre = 0; // 中间位置,默认0
while (start <= end) {
centre = (start + end) / 2; // 获取中间位置
if (num == datas[centre]) { // 如果找到
System.err.println("存在需要查找的数据:所在为主-" + centre + ", 数字为-" + num);
return ;
}
if (num < datas[centre]) { // 需要查找的数据在中间位置的左边
end = centre - 1;
} else { // 需要查找的数据在中间位置的右边:num > datas[centre]
start = centre + 1;
}
}
System.err.println("不存在需要查找的数据!");
}
}
3、其他
有关数据结构与算法的知识还有:
1)ArrayList和LinkList原理,代码实现,性能区别。
2)栈和队列的代码实现。
3)递归:文件夹遍历,八皇后,汉罗塔,寻址。
4)二叉树:堆排序,中排序以及图。
后面会一一讲解和实现。
java数据结构与算法(一)的更多相关文章
- Java数据结构和算法
首先,本人自学java,但是只学习了java的基础知识,所以想接下来学习一下数据结构和算法,但是找了很多教材,大部分写的好的都是用c语言实现的,虽然知道数据结构和算法,跟什么语言实现的没有关系,但是我 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- Java数据结构和算法(十四)——堆
在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现 ...
- Java数据结构和算法(九)——高级排序
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...
- java数据结构与算法之栈(Stack)设计与实现
本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...
- Java数据结构和算法 - 堆
堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...
- Java数据结构和算法 - 二叉树
前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...
- Java数据结构和算法 - 高级排序
希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...
- Java数据结构和算法 - 递归
三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,……中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...
随机推荐
- 25个增强iOS应用程序性能的提示和技巧(0基础篇)
在开发iOS应用程序时,让程序具有良好的性能是非常关键的. 这也是用户所期望的,假设你的程序执行迟钝或缓慢,会招致用户的差评.然而因为iOS设备的局限性,有时候要想获得良好的性能,是非常困难的. 在开 ...
- 自学Zabbix1.3-zabbix进程
默认情况下zabbix包含5个程序:zabbix_agentd.zabbix_get.zabbix_proxy.zabbix_sender.zabbix_server,另外一个zabbix_java_ ...
- python decorator 进阶
上一篇文章开始的时候提到 “一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者参数)” 有一般情况,就有特殊情况.第一种特殊情况:装饰器可能也是一个类:第二种特殊 ...
- mybatis if-else(写法)
mybaits 中没有else要用chose when otherwise 代替 范例一 <!--批量插入用户--> <insert id="insertBusinessU ...
- Android查缺补漏(View篇)--自定义 View 中 wrap_content 无效的解决方案
自定义 View 中 wrap_content 无效的解决方案 做过自定义 View 的童鞋都会发现,直接继承 View 的自定义控件需要重写 onMeasure() 方法,并设置 wrap_cont ...
- php iconv 函数参数的区别
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/57 用户输入:英特尔® 酷睿™ i7处理器大显身手 case1 ...
- bzoj 2002 HNOI 2010 弹飞绵羊
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- nova创建虚拟机源码分析系列之一 restful api
开始学习openstack源码,源码文件多,分支不少.按照学习的方法走通一条线是最好的,而网上推荐的最多的就是nova创建虚机的过程.从这一条线入手,能够贯穿openstack核心服务.写博文仅做学习 ...
- js浏览器对象navigator
移动端通常需要判断当前设备的类型,比如安卓,ios等.输出浏览器的请求代理,可以判断浏览器类型.js代码如下 判断当前浏览器的请求代理 我是出来玩的! <!DOCTYPE html> &l ...
- vue过滤数字为2位小数点,过滤器
过滤数字为2位小数点 filters: { //保留2位小数点过滤器 不四舍五入 number(value) { var toFixedNum = Number(value).toFixed(3); ...