线性结构的特点是:
在数据元素的非空有限集中,1).存在唯一的一个被称做“第一个”的数据元素;2).存在唯一的一个被称做“最后一个”的数据元素;3).除了第一个之外,集合中的每个数据元素均只有一个前驱;4).除了最后一个之外,集合中每个数据元素均只有一个后继。
线性表中的数据元素可以是各种各样的,但统一线性表中的元素必定具有相同的特征,即属同一数据对象,相邻数据元素之间存在着序偶关系。
一、线性表(linear List)的分类:数组、链表、栈、队列
二、线性表的顺序表示——数组(Array):
线性表的顺序表示指的是用一组地址连续存储单元一次存储线性表的数据元素,具体表现就是数组。
数组(Array)是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。
由于数组一般不作插入、删除操作,也就是说,一旦建立了数组,则结构的数据元素个数和元素之间的关系就不再变动。因此,采用顺序存储结构表示数组自然的事了。
存储单元是一维的结构,而数组是多个维的结构,则用一组连续存储单元存放数组的数据元素就有个次序约定。
三、线性表的链式表示——链表(LinkList):
线性表的链式存储结构的特点是用一组任意的存储单元储存线性表的数据元素(这组存储单元可连续也可不连续),因此为了表示每个元素与其后继元素的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。
1.单链表:链表每个数据元素的结点只包含一个指针域。
2. 循环链表:特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。由此,从表任何一个结点触发均可找到表中其他结点:
3.双向链表:在双向链表的结点中有两个指针域,其中一个是指向直接后继,另一个指向直接前驱。
四、栈(stack):
是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾有特殊含义,成为栈顶,表头端称为栈底。不含元素表称为空栈。
五、队列(queue):
1.队列是一种先进先出(first in first out)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。
2. 双端队列:限定插入和删除操作在表的两端的线性表。这两端分别称做端点1和端点2.也可像栈一样。
3.循环队列;
在队列的顺序存储结构中,除了存储单元之外。还要附设两个指针front和rear分别指示队列头元素及队列尾元素的位置。
在循环队列中仅凭Q.front = Q.rear无法判断出队列空间是“空”还是“满”。可有两种处理方法:其一,是另设一个标志位来区别队列是“空”还是“满”;其二,是少用一个元素空间,约定以“队列头指针在队列尾指针的下一位置上”作为队列呈“满”状态的标志。
4.阻塞队列:
在队列的基础上增加了阻塞操作,简单来说,就是在队列为空的时候,从队列头部取出数据会被阻塞。因为此时还没有数据可以取,直到队列中有了数据才能返回;如果队列已经满了,那么插入数据的操作就会被阻塞,直到队列中有空闲位置后在插入数据,然后返回。
5.并发队列:
线程安全的队列,对于队列中的存入和取出的操作都是线程安全的。