数据结构的四种基本存储结构

一、链表java

 

 

建立链表和建立数组不一样,不会先划出一块连续的内存,由于链表中的数据并非连续的,链表在存储数据的内存中有两块区域,一块区域用来记录下一个数据保存在哪里(指向下一个数据的指针)。当有数据进入链表时,会根据指针找到下一个存储数据的位置,而后把数据保存起来,而后指向下一个存储数据的位置。虽然链表是线性表,可是并不会按线性的顺序存储数据。由于链表这种保存数据的方式,,因此插入和删除很是容易,读取时比较麻烦。例如:一个链表中0->1->2->3->4这五个内存地址中都存了数据,如今须要往2中插入一个数据,只须要更改1号和2号中记录下一个数据的位置便可,对其余数据无影响。若是想要读取一个数据,须要从0号开始一个一个找,直到找到那条数据为止。数组

优势:链表的插入和删除很是方便数据结构

缺点:不太适合于随机访问,而在连续访问时,链表也具备很好的表现3d

 

二、数组指针

        java建立数组时,会在内存中划分出一块连续的内存,而后当有数据进入的时候将数据按顺序的存储在这块连续内存中。当须要读取数组中的数据中,须要提供数组中的索引,而后数组根据索引将内存中的数据取出来,返回给读取程序。只有相同类型的数据才能够一块儿存储在数组中。blog

        全部数据结构都支持几个基本操做:读取、插入、删除索引

        由于数组在存储数据时是按顺序存储的,由于存储内存是连续的,因此寻址读取数据比较容易,插入和删除比较困难。读取数据时,只须要告诉数组从哪一个索引读取便可,数组会直接把须要位置的数据取出来。插入和删除比较困难。插入位置后面全部内存中的数据都要日后移一个位置。很是耗时。队列

优势:较高的存储效率和快速的随机存取内存

缺点:数组不能动态的增加,而且在插入和删除时,平均会移动n/2的数据,不适用于随机位置插入和删除很频繁的操做效率

 

三、栈

栈是一种先进后出的数据结构,数组和链表均可以生成栈,当数据进入栈时会按照规则压入到栈底部,再次进入的数据会压到第一次的数据上面。在取出栈中数据的时候会先取出最上面的数据,先进后出。

 

 队列(queue)和栈是一种操做受限的线性表。栈的操做受限表如今插入和删除只能对栈顶元素进行,删除的元素永远是最新插入的,即操做遵循后入先出(LIFO)原则。队列中的操做原则与栈的相反。删除的元素是最先插入到队列中的,就像排队同样,排在最前面的人将最早从队伍中出列。这样的操做原则经常称做先入先出。因此对于栈和队列的频繁随机插入删除不合适

四、队列

 

队列是一种先进先出的数据结构,数组和链表也能够生成队列。

队列(queue)和栈是一种操做受限的线性表。栈的操做受限表如今插入和删除只能对栈顶元素进行,删除的元素永远是最新插入的,即操做遵循后入先出(LIFO)原则。队列中的操做原则与栈的相反。删除的元素是最先插入到队列中的,就像排队同样,排在最前面的人将最早从队伍中出列。这样的操做原则经常称做先入先出。因此对于栈和队列的频繁随机插入删除不合适

相关文章
相关标签/搜索