常见的线性列表结构---【数组、链表、栈、队列、堆】

我们在算法设计当中最常见的线性结构列表无非是一下几种:

1.数组:

数组应该是我最常用的一种。他的存储地址是连续的,就是当我们新开辟一个数组时,我们会给他分配一个连续的地址。由于他的地址是连续的,所以在我们知道他下标的时候,查找元素的速度非常快。

2.链表:

链表中的元素的位置不固定,链表中的每一个结点都一个头指针与尾指针,通过这样把链表中的元素连接起来,所以查找一个元素的时间与该元素所处的位置有关系。但是他在空间上面占有优势。

3.栈:

栈中的元素有一个特点,就是保持“ 先进先出”的原则。我们可以用一摞碟子做比喻,我们每次在加入新的碟子和拿走碟子的时候都在顶部做操作,他的应用也很广泛。

4.队列:

队列中,我们对元素的操作分别在队头与队尾。元素的插入在队尾,元素的删除在队头。在图的问题上面运用比较多。

5.堆:

堆是解决二叉树的一种常用的结构,是优先队列的一种优化结构。

这些都是非常基础又是非常重要的知识点,所以无论如何你必须要掌握。其余的废话就不多说了,后面我会针对每一种结构做一个详细的分享,希望大家多多支持,共同学习共同进步。

时间: 2024-07-29 11:43:51

常见的线性列表结构---【数组、链表、栈、队列、堆】的相关文章

线性存储结构--数组

#include<stdio.h> #include<stdlib.h> //定义了一个数据类型叫struct Arr 该数据类型包含 3个成员 struct Arr{ //12个字节 int *pBase;//存储数组第一个元素的地址 int len;//数组所能容纳的最大元素个数 int cnt;//当前数组有效元素的个数 }; //不用指针 用值得话 导致方法里存在局部变量 不能使主方法的改变 只能传地址 void Init_arr(struct Arr *p,int len

数组、栈、堆(java基础知识五)

1.数组概述.定义格式 * A:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引用数据类型. * B:数组定义格式 格式1:数据类型[] 数组名;----int[] arr; 格式2:数据类型 数组名[];----int arr[]; * C:数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致, 2.数组初始化.动态初始化 * A:什么是数组的初始化 Java中的数组必须先初始化,然后才能使用. 所谓初始化:就是

数据结构录 之 链表&amp;栈&amp;队列

三种基本的数据结构,来稍微说一下. 首先链表,这个几乎每本C++的语言书都会说的,直接看书上说的就好. 链表就是一个链,每一个都有一个指针指向下一个,然后这样串了起来.然后可以从头开始找,一直找到尾巴.然后对于某个数据点,都可以删除,只需要让他前面那个指向他后面那个,这样从头开始找的时候就找不到这个点了...在这个点之后添加一个点也是这样,直接让这个点指向那个新的,然后让新的指向原来这个点指向的后一个... 可以想象就是一个个点,然后第一个指向第二个,第二个指向第三个...就像是一条长长的链一样

栈&amp;队列&amp;堆

栈:一种只能在一端进行插入和删除的特殊线性表,按照先进后出的方式组织数据,先进入的数据被压入栈底,最后的数据被压入栈顶,需要读取数据时从栈顶开始弹出数据 队列:一种只能在一端进行数据的插入及另一端进行数据的删除的特殊线性表,按照先进先出的方式组织数据 堆:N个元素{k1, k2, k3, k4, k5, k6 ... kn}组成的集合,若满足下列关系之一则可称之为堆: ki <= k2i 且 ki <= k2i+1, (i = 1, 2, 3 ... n/2) ki >= k2i 且 k

理解 &quot;栈&quot; &quot;队列&quot;,&quot;堆&quot;(后进先出)

[栈] ??函数调用形成了一个栈帧 function foo(b) { var a = 10; return a + b + 11; } function bar(x) { var y = 3; return foo(x * y); } console.log(bar(7)); 当调用bar时,创建了第一个帧 ,帧中包含了bar的参数和局部变量.当bar调用foo时,第二个帧就被创建,并被压到第一个帧之上,帧中包含了foo的参数和局部变量.当foo返回时,最上层的帧就被弹出栈(剩下bar函数的调

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

数据结构 参考:http://lupython.gitee.io/ 线性结构 就是能够用一根线串起来的数据结构 数组 (列表) 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件? 答:内存必须有一块连续的内存空间 int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型. int a[7] = array(1,2,3,4,5,6,7) 问:如何申请内存? 答:C,C++语言,申请:mallco (28).释放:free(28) 问:int

常见的线性结构

目录 前言 数组 数组介绍 自定义数组 实现数组的增删改查方法 动态数组 时间复杂度分析 栈 栈介绍 定义栈接口 基于数组实现栈的基本操作 使用栈实现"括号匹配"问题 队列 队列介绍 定义队列接口 数组队列 循环队列 数组队列和循环队列的性能比较 链表:最基础的动态数据结构 链表介绍 实现链表的增删改查操作 通过自定义链表实现栈 通过自定义链表实现队列 递归 前言 ??本篇博客主要是记录手写这些这数据结构的底层实现,加深对线性结构的理解,实现自己的一个小型数据结构库,也会进行简单的时间

用数组模拟栈的结构

package datastruct; import java.util.Arrays; /** * 用数组模拟栈的结构:后进先出(LIFO) 线性表结构 * @author stone * 2014-07-29 06:34:49 */ public class SimulateStack<E> { public static void main(String[] args) { SimulateStack<String> ss = new SimulateStack<Str

04.线性表(三)链式存储结构.单链表2

链式存储结构.单链表2 顺序存储结构的创建实质是一个数组的初始化,存储空间连续且其大小和类型已经固定:单链表存储空间不连续,是一种动态结构且它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成. 一.单链表的整表创建 创建单链表的过程就是一个动态生成链表的过程,即从"空表"的初始化起,依次建立各元素结点,并逐个插入链表. 1.算法思路 (1)声明一个结点p和计数器变量i; (2)初始化一空链表L (3)让链表L的头结点的指针指向NULL,即建立一个带头