欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据结构导论(第二章线性表)

程序员文章站 2022-03-03 09:29:23
顺序存储结构表示的线性表,在做插入或删除操作时,平均 需要移动大约一半的数据元素。当线性表的数据元素量较大, 并且经常要对其做插入或删除操作时,这一点需要考虑 ......

一、线性表的基本概念

线性表的逻辑结构 线性表是一种最简单、最常见的数据结构

线性表是由n(n≥0)个数据元素(结点)a1,a2,a3,……an组成的有限序列。 数据元素的个数n定义为表的长度。 当n=0时,称为空表

将非空的线性表(n>0)记作:l=(a1,a2,a3,……,an) a1:起始结点,an:终端结点。 a1称为a2的直接前驱,a3称为a2的直接后继

线性表的特点:

  • 线性表中只有1个起始结点,1个终端结点, 起始结点没有直接前驱,有1个直接后继。
  • 终端结点有1个直接前驱,没有直接后继。
  • 除这2个结点外,每个结点都有且只有1个直接前驱和1个直接后继

二、线性表的顺序存储

线性表顺序存储的方法:将表中的结点依次存放在计算机内存 中的一组连续存储单元中。

数据元素在线性表中的邻接关系决定其在存储空间中的存储位置;即逻辑结构中相邻的结点,其存储位置也相邻。

 用顺序存储实现的线性表称为顺序表。

顺序表上的基本运算 : 插入(insert)、删除(delete)、定位(locate)

=======================插入=========================

线性表的插入运算:是指在表的位置i上,插入一个新结点x,使 长度为n的线性表(a1,a2,……,ai,……,an) 变为长度为n+1的线性表(a1,……,x,……,an)

插入时的主义事项:

  • 当表空间已满,不可再做插入操作。
  • 当插入位置是非法位置,不可做正常的插入操作。

顺序表插入操作过程

  • 将表中位置为n ,n-1,…,i上的结点,依次后移到位置n+1,n,…,i+1 上,空出位置i。
  • 在位置i上插入新结点x。 (当插入位置i=n+1时,无须移动结点,直接将x插入表的末尾)
  • 该顺序表长度加1

假设线性表中含有n个数据元素,在进行插入操作时,有n+1个位置可插入; 在位置i插入时,要移动n-i+1个数据。

数据结构导论(第二章线性表)

 

 需要移动:10-4+1=7 ;7个节点

数据结构导论(第二章线性表)

======================删除=====================

线性表的删除运算:是指将表的位置i的结点删去,使长度为n的线性 表(a1,a2,……,ai,……,an)变成长度为n-1的线性表 (a1,a2,……,ai-1,ai+1,……,an)

注意事项:当要删除元素的位置i不在表长范围内时,为非法位置,不能做正 常的删除操作

顺序表删除操作过程

  • 若i=n,则只要删除终端结点,无须移动结点;
  • 若1≤i≤n-1,则必须将表中位置 i+1,i+2,……,n的结点,依次前移到 位置i,i+1,…,n-1上,以填补删除操作造成的空缺。 (仅当删除位置i=n时, 才无须移动结点,直接令表长度-1即可)
  • 该表长度减1

假设线性表中含有n个数据元素,在进行删除操作时,有n个位置可删除, 在位置i删除时,要移动n-i个数据。

 数据结构导论(第二章线性表)

数据结构导论(第二章线性表)

 

 

 结论:顺序存储结构表示的线性表,在做插入或删除操作时,平均 需要移动大约一半的数据元素。当线性表的数据元素量较大, 并且经常要对其做插入或删除操作时,这一点需要考虑

===================定位=====================

定位:从第一个元素a1起,依次和x比较, 直到找到一个与x相等的数据元素,则 返回它在顺序表中的存储下标或序号;当查遍整个表都没找到与x相等的元 素,返回0。

定位算法的分析:

定位运算的功能是查找出线性表l中值等于x的结点序号的最小值,当不存 在这种结点时,结果为0。

i从0开始,作为扫描顺序表时的下标: 

  • 最好情况下,第1个元素就是x值,此时查找比较次数为1。 
  • 最坏情况下,最后1个元素是x值,此时查找比较次数为n。 
  • 故平均查找长度为(n+1)/2。

数据结构导论(第二章线性表)

三、线性表的链式存储

结点结构:

 

数据结构导论(第二章线性表)

 

 链表的具体存储表示为:

  • 用一组任意的存储单元来存放。
  • 链表中结点的逻辑次序和物理次序不一定相同,还必须存储指示其后继 结点的地址信息

=================单链表===================

数据结构导论(第二章线性表)

 

  • 单链表:所有结点通过指针链接而组成。 
  • null:空指针。
  • head:头指针。
  • 尾指针:指向最后一个元素(尾结点)的指针。

单链表的一般图示法:由于我们常常只注重结点间的逻辑顺序,不关心每个结点的实际位置,可以用 箭头来表示链域中的指针

单链表各个结点在内存中的存储位置(物理位置)并不一定连续

数据结构导论(第二章线性表)

 

 头结点:一般不存数据,利用head存放该结点地址。

单链表特点总结:

  • 链表由头指针唯一确定,单链表可以用头指针的名字来命名。头指针名是head3的链表可称为表head3。 
  • 起始节点又称为首结点,无直接前驱,故在无头结点时,设头指针head指向首结点。
  • 终端结点又称尾结点,无直接后继,故终端结点的指针域为空,即null。 
  • 除头结点之外的结点为表结点,为运算操作方便,头结点中不存数据。