合肥建站网站,windows优化大师使用方法,做基因结构可以用哪个网站,泰安可信赖的企业建站公司推荐链接#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD… 推荐链接 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoDB】 总结——》【Elasticsearch】 Java——》线性数据结构 一、数组Array1、特点2、优点3、缺点4、示例 二、链表1、特点2、分类2.1 单向链表1删除节点2添加节点 2.2 双向链表1删除节点2添加节点 2.3 循环链表 三、队列queue1、特点2、数据结构演示3、示例 四、栈stack1、特点2、主要操作 线性表就是数据排成像一条线的结构。 每个线性表上的数据最多只有前和后两个方向。 线性表结构数组、链表、队列、栈 一、数组Array
数组是一种线性表数据结构。用一组连续的内存空间来存储一组具有固定大小的相同类型的数据。在数组中数据元素按照有序的方式进行排列可以通过索引访问数组中的任意位置的元素。 1、特点
顺序存储按照顺序存储在连续的内存空间中类型相同数组中的所有元素必须是相同的数据类型索引访问每个元素都有一个唯一的索引可以通过索引快速访问大小固定一旦定义了数组的大小就不能改变。如果需要更大的存储空间需要重新定义一个新的数组。
2、优点
访问速度快由于数组是顺序存储的可以通过索引直接访问数组中的元素时间复杂度为O(1)。易于实现数组是一种简单的数据结构容易实现和操作。
3、缺点
大小固定数组的大小是固定的不能动态扩展。如果需要更多的存储空间需要重新定义一个新的数组这会增加额外的开销。空间利用率低由于数组是连续的内存空间即使某些位置没有被使用也不能被其他数据结构使用导致空间利用率较低。
4、示例
// 动态初始化初始化时由程序员只指定数组长度由系统为数组元素分配初始值
char c1[] new char[5];// 静态初始化 初始化时由程序员显示置顶每个数组的初始值由系统决定数组长度
char c2[] new char[]{E,D,U,Y,U};
char c3[] {E,D,U,Y,U};二、链表
数组是一种线性表数据结构。 通过指针将一组零散的内存块串联在一起。链表中的每个内存块被称为节点每个节点除了存储数据之外还需要记录链上的下一个节点的地址。
1、特点
不需要连续的内存空间有指针引用插入、删除数据效率高时间复杂度为O(1)级别只需更改指针指向即可但是随机访问效率低时间复杂度O(n)级别需要从链头至链尾进行遍历。和数组相比内存空间消耗更大因为每个存储数据的节点都需要额外的空间存储后继指针。
2、分类
分类特点单向链表节点只有一个后继指针next指向后面的节点双向链表节点除了有一个后继指针next指向后面的节点外还有一个前驱指针prev指向前面的节点循环链表循环链表与单向链表的唯一区别是尾节点的指针指向头节点形成一个环
2.1 单向链表
单向链表由节点组成每个节点都包含下一个节点的指针表头为空表头的后继节点是结点10(数据为10的结点)“节点10的后继结点是节点20”(数据为20的结点)
1删除节点 2添加节点 2.2 双向链表
双链表由节点组成每个结点中都有两个指针分别指向直接后继和直接前驱。所以从双向链表中的任意一个结点开始都可以很方便地访问它的前驱结点和后继结点。 static final class Node {// 前一个节点volatile Node prev;// 后一个节点volatile Node next;// 链表节点存储的具体数据volatile Thread thread;}1删除节点 2添加节点 2.3 循环链表
三、队列queue
队列是一种线性表数据结构。先进先出FIFO后进后出。 只允许在一端进行插入操作而在另一端进行删除操作的线性表。 允许插入的一端称为队尾允许删除的一端称为队头。
1、特点
先进先出队列中的元素遵循先进先出的原则即最早进入队列的元素最先被删除。插入和删除操作发生在同端队列中的插入操作发生在队尾删除操作发生在队头。无界队列队列的长度可以是任意的整数只要内存空间足够。
2、数据结构演示
参考链接数据结构演示地址
3、示例
package com.xiaoxian.demo;import java.util.LinkedList;
import java.util.Queue;public class QueueTest {public static void main(String[] args) {QueueInteger queue new LinkedList();queue.offer(3);//尾插queue.offer(6);queue.offer(9);queue.offer(12);System.out.println(queue);System.out.println(queue.peek());//访问队列头元素System.out.println(queue);System.out.println(queue.poll());//删除队列头元素System.out.println(queue);}
} 四、栈stack
栈是一种线性表数据结构。 只能在表尾进行插入或者删除后进先出。 表尾端称为栈顶top表头端称为栈底bottom。 不含元素的空表称为空栈。
1、特点
后进先出只能在表尾进行插入或者删除
2、主要操作
入栈push在栈顶添加一个元素。出栈pop删除栈顶的元素并返回其值。判断栈空is_empty检查栈是否为空。获取栈顶元素top返回栈顶的元素值但不删除它。