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数据结构与算法(一)的更多相关文章

  1. Java数据结构和算法

    首先,本人自学java,但是只学习了java的基础知识,所以想接下来学习一下数据结构和算法,但是找了很多教材,大部分写的好的都是用c语言实现的,虽然知道数据结构和算法,跟什么语言实现的没有关系,但是我 ...

  2. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  3. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  4. Java数据结构和算法(十四)——堆

    在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现 ...

  5. Java数据结构和算法(九)——高级排序

    春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...

  6. java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...

  7. Java数据结构和算法 - 堆

    堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...

  8. Java数据结构和算法 - 二叉树

    前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...

  9. Java数据结构和算法 - 高级排序

    希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...

  10. Java数据结构和算法 - 递归

    三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,……中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...

随机推荐

  1. 自学Zabbix3.8.4-可视化Visualisation-Slide shows

    Zabbix3.8.4-可视化Visualisation-Slide shows幻灯片 定义好screen之后,我们想了解服务器状况之时,一般会一个个screen点过去,zabbix提供了幻灯片展示方 ...

  2. Selenium Python 安装指导

    最近无聊.又重新装了个selenium 果然时代变了.安装的时候的方法和以前不太一样了.因此觉得有必要单列出来加以说明 另外备注:测试小伙伴们.安装此类工具报错.尝试以下两个方案之一: 1.请转sta ...

  3. Freemarker页面静态化技术,activemq监听页面变动

    初步理解: 架构优化: 静态页面的访问速度优于从缓存获取数据的动态页面的访问速度: Freemarker: 导包 模板:hello.ftl <!DOCTYPE html> <html ...

  4. JDBC开源框架:DBUtils使用入门

    在单元测试过程中,只涉及到数据库的直接操作来验证业务逻辑是否正确的情况,DBUtils非常适合使用.它结构简单,包小,友好处理掉那些jdbc异常,让你更专注于业务代码,而非底层的操作.官网对它的定义: ...

  5. C# VS2010结合SQL Server 2008数据库编程实现方法

    SQL Server 数据库在C#编程中经常用到,如何实现在具体项目中数据库和具体应用的结合是我们经常遇到的问题,我们这次主要针对如何使用SQL Server 数据库展开,下面是具体的操作以及简单的代 ...

  6. MySQL锁总结

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/78 MySQL 锁基础 参考了何登成老师文章的结构MySQL 加 ...

  7. eclipse无法识别Web项目的问题

    1.如果导入web项目后,eclipse无法将其识别为web项目,因而无法发布到tomcat容器中的话,可以采取以下步骤尝试解决: 选中项目名称并点击右键,选择“Properties”项,在出项的面板 ...

  8. chmod 命令详解

    chmod 作用:修改目录或文件权限(= 赋值不管存在与否, + 增加权限)符号链接的权限无法变更, 如果用户对符号链接修改权限, 其改变会作用在被链接的原始文件. 参数: -R: 递归修改处理 -v ...

  9. HtmlTestRunner无法生成HTML报告问题

    环境: Python3.6 + Selenium3.3.0 + HtmlTestRunner1.1.0 ON Windows10 IDE: PyCharm HtmlTestRunner地址: http ...

  10. K:线性表的实现—链表

    单链表的概念:  采用链式存储方式存储的线性表称之为链表,链表中每个节点包含存放数据元素的值的数据域和存放指向逻辑上相邻节点的指针域.若一个节点中只包含一个指针域,则称此链表为单链表. 单链表的特点: ...