# DataStructuresAndAlgorithm **Repository Path**: zhuxinya/data-structures-and-algorithm ## Basic Information - **Project Name**: DataStructuresAndAlgorithm - **Description**: 数据结构与算法 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-12 - **Last Updated**: 2020-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DataStructuresAndAlgorithm ## 介绍 数据结构与算法 ## 数据结构和算法概述 ### 线性结构和非线性结构 #### 线性结构 - 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 - 线性结构有两种不同的存储结构,即**顺序存储结构(数组)**和**链式存储结构(链表)**。顺序村相互的线性表成为顺序表,顺序表中的存储元素是连续的 - 链式存储的线性表成为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 - 线性结构常见的有:数组、队列、链表和栈。 #### 非线性结构 > 非线性结构包括:二维数组,多维数组,广义表,树结构,图结构 ## 稀疏数组和队列 ### 稀疏数组 > 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 #### 稀疏数组的处理方法 - 记录数组一共有几行几列,有多少个不同的值 - 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 #### 队列 - 队列是一个有序列表,可以用数组或是链表来实现。 - 遵循**先入先出**的原则。即:先存入队列的数据,要先取出。后存入的要后取出 ## 链表 - 链表是以节点的方式来存储,是链式存储 - 每个节点包含 data 域, next 域:指向下一个节点. - 链表的各个节点不一定是连续存储. - 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 ### 单链表 ### 双链表 ### 区别 - 单项列表查找的方向只能是一个方向,而双向列表可以向前或者向后查找 - 单项列表不能自我删除,需要靠辅助接点,而双向链表则可以自我删除 ## 栈 - 栈的英文为(stack) - 栈是一个先入后出(FILO-First In Last Out)的有序列表。 - 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的 一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 - 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元 素最先删除,最先放入的元素最后删除 - 入栈(push) 出栈(pop) ### 应用场景 - 子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以 回到原来的程序中。 - 处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数、区域变量等数据存入堆 栈中。 - 表达式的转换[中缀表达式转后缀表达式]与求值(实际解决)。 - 二叉树的遍历。 - 图形的深度优先(depth 一 first)搜索法。 ## 排序 ### 时间复杂度 ### 内部排序 #### 插入排序 ##### 直接插入排序 ##### 希尔排序 #### 选择排序 ##### 简单选择排序 ##### 堆排序 #### 交换排序 ##### 冒泡排序 ##### 快速排序 #### 归并排序 #### 基数排序 ### 外部排序 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技