暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据结构2 | 线性表、栈和队列

数据与共享 2018-03-24
724

什么是线性结构,其有何特性呢?在数据元素的非空有限集合中,存在唯一的一个被称作“第一个”的数据元素存在唯一的一个被称作“最后一个”的数据素;除第一个外,集合中的每个数据元素均只有一个前驱除最后一个外,集合中的每个数据元素均只有一个后继。堆栈也是非常常用的数据结构,今天我们就来揭开它的庐山着面目吧。

线性表

  1. 定义

    一个线性表是n个数据元素的有限序列。

    例如:英文字母表(A,B,C,……,Z)是一个线性表

    特征元素个数n(n≥0) 称为表长度,n=0空表,记为()或φ,1<i<n时

    ai的直接前驱是ai-1,a1无直接前驱

    ai的直接后继是ai+1,an无直接后继

    元素同构(属于同一数据对象)。

  2. 线性表--顺序存储

    以数据元素物理位置的相邻表示逻辑关系相邻。

    优点:随机存取。

    缺点:插入和删除的时候,需要移动大量的元素。

  3. 线性表--链式映象

    单链表

    用一组地址任意的存储单元存放线性表中的数据元素。

    N个结点通过指针域组成的表

    元素(数据的映象)+ 指针(关系的映象) =  结点(数据元素的映象)

  4. 单链表存储结构

    以线性表中第一个数据元素的存储地址作为线性表的地址,称作线性表的头指针。有时为了操作方便,在第一个结点之前虚加一个“头结点”,以指向头结点的指针为链表的头指针。

  5. 循环链表

    是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点。

  6. 双向链表

    “查询” 和单链表相同。

    “插入” 和“删除”时需要同时修改两个方向上的指针。

栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS。通常称,栈和队列是限定插入和删除只能在表的“端点”进行的线性表。

  1. 栈的定义和特点

    定义:限定仅在表尾进行插入或删除操作的线性表。表尾—栈顶,表头—栈底,不含元素的空表称空栈。

    特点:先进后出(FILO)或后进先出(LIFO)

  2. 栈类型的实现

    (1)顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指向表尾的指针top,指示栈顶元素在顺序栈中的位置,称为栈顶指针。连续存储单元的基址用指针base指示,称为栈底指针。

    栈的状态:

    防止栈溢出:

    (2)链栈



    入栈和出栈

队列

队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。

  1. 定义及特点

    定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。

    队尾(rear)——允许插入的一端

    队列特点:先进先出(FIFO)

  2. 头(front)——允许删除的一端

  3. 队列的分类

    链  队 列——链式映象

    循环队列——顺序映象

    循环队列(基本思想:把队列设想成环形)


        后记:通过对线性表、栈、队列的简单介绍,大家不难发现,后两个其实是基于前者的扩展。线性表,存储结构有两种方式,顺存存储(连续的物理存储空间),链式存储(通过指针的方式,把在物理存储上不连续的空间串在一起)。栈:先进后出;队列:现进先出,而其实现方式也有两种,一个物理空间连续,另一个呢,不连续。

学习之路漫长,感兴趣加关注。



文章转载自数据与共享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论