Java数据结构和算法(一)线性结构

数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html)

线性表 是一种逻辑结构,相同数据类型的 n 个数据元素的有限序列,除第一个元素外,每个元素有且仅有个直接前驱,除最后一个元素外,每个元素有且仅有一个直接后继。

一、基本概念

线性表具有以下特点:

  • 元素个数有限
  • 逻辑上元素有先后次序
  • 数据襟型相同
  • 仅讨论元素间的逻辑关系

(1) 数组和链表

选项 数组 链表
读取 O(1) O(n)
插入 O(n) O(1)
删除 O(n) O(1)

从上表可以看出数组的读取复杂度为 O(1),插入和删除为 O(n),链表则恰好相反。即数组读快写慢,链表读慢写快。

数组的优点:一是随机访问性强;二是查找速度快。
数组的缺点:一是插入和删除效率低;二是可能浪费内存;三是内存空间要求高,必须有足够的连续内存空间;四是数组大小固定,不能动态拓展。

链表的优点:一是插入删除速度快;二是内存利用率高,不会浪费内存;三是大小没有固定,拓展很灵活。
链表的缺点:一是不能随机查找,必须从第一个开始遍历,查找效率低。

(2) 单链表、双向链表和循环链表

单链表和双向链表的区别在于单链表的每个节点只保存后继节点,而双向链表即保存了后继节点也保存了前驱节点。而循环链表的第一个节点的指针指向最后一个节点,最后一个节点的指针指向第一个节点,循环链表又分为循环单链表和循环双链表。

基本概念:数组和链表的区别,单链表,双向链表和循环链表单链表基本操作实战之单链表反转,单链表取中间值实战之合并两个有序链表面试真题:奇数位升序,偶数位降序链表排序面试真题:单链表实现归并排序


每天用心记录一点点。内容也许不重要,但习惯很重要!

Java数据结构和算法(一)线性结构的更多相关文章

  1. Java数据结构与算法(1):线性表

    线性表是一种简单的数据类型,它是具有相同类型的n个数据元素组成的有限序列.形如如A0,A1,...,An-1.大小为0的表为空表,称Ai后继Ai-1,并称Ai-1前驱Ai. printList打印出表 ...

  2. Java数据结构和算法(一)线性结构之单链表

    Java数据结构和算法(一)线性结构之单链表 prev current next -------------- -------------- -------------- | value | next ...

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

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

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

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

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

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

  6. Java数据结构和算法 - 数组

    Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new ...

  7. Java数据结构和算法(一)树

    Java数据结构和算法(一)树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 前面讲到的链表.栈和队列都是一对一的线性结构, ...

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

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

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

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

随机推荐

  1. 杂: PYTHON上数据储存:推荐h5py

    一篇很短的小短文,主要推荐下做科学计算是大量数据的储存问题 最近在做一个CNN的项目,文件夹里有20w张图片要读入并保存到一个data文件(不然每次都读20w文件太麻烦). 折腾了一个下午,发现了一个 ...

  2. Selenium如何定位动态id的元素?

    怎么定位这类型的元素呢? 根据其他属性定位如果有其他固定属性,最先考虑的当然是根据元素的其他属性来定位,定位方式那么多,何必在这一棵树上吊死.. 根据相对关系定位根据其附近的父节点.子节点.兄弟节点定 ...

  3. OpenACC 梯度下降法求解线性方程的优化

    ▶ 书上第二章,用一系列步骤优化梯度下降法解线性方程组.才发现 PGI community 编译器不支持 Windows 下的 C++ 编译(有 pgCC 命令但是不支持 .cpp 文件,要专业版才支 ...

  4. Spring 配置 web.xml (防止spring 内存溢出)

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " ...

  5. 表析LESS、Sass和Stylus的异同

    . 首页 博客园 联系我 前言:CSS预处理语言. 基本差别. 基本语法. 变量与作用域. 混合(Mixins). 嵌套实现后代选择器. 继承. 条件语句. 循环语句. 综合对比. 留言评论 返回顶部 ...

  6. javaScript日期

    日历 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <head> <t ...

  7. FDMemTable 数据集

    c++builder FDMemTable 内存表 内存数据表:现在应该首选 TFDMemTable 了(之前是 TClientDataSet) FDMemTable->CloneCursor( ...

  8. Excel 返回第2大的值

  9. Procedure-Function mysql

    1.基本用法 drop PROCEDURE if EXISTS sp1; -- 如果存在sp1存储过程则删除掉 create PROCEDURE sp1() SELECT 1; --创建最简单的存储过 ...

  10. Hibernate常用网址

    Hibernate 官网用户手册: http://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide ...