您好、欢迎来到现金彩票网!
当前位置:双彩网 > 线性次序 >

顺序链表到底是什么在哪里讲的?

发布时间:2019-05-27 07:05 来源:未知 编辑:admin

  但是动态数组中没有“链”,和链表没什么直接关系,为啥要说成是顺序“链表”呢?

  请不要把“顺序表”和“链表”的东西贴上来,这毫无用处;也不要说随便一本数据结构书上就有“顺序链表”... 请告诉我是哪一本哪一章。我大学就是学计算机专业的,听过张铭老师一个学期的数据结构,开始就讲了顺序表、链表,后来还有很多其他东西,但是记得没有“顺序链表”这个东西。

  xinlan1810:谢谢,我提问以前就搜索到并且看过了,就是上面提到的动态数组。但是只有网上能找到的定义,可靠性不够。因为这种东西无论你我都可以随便写它一两篇。我需要的是比较权威的说明——哪本教材上有。

  夜の协奏曲:不是听错了,因为是印在纸上的... 块链的可能性存在,不过尚未找到教材...展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部“顺序链表”?没听过呀。也许是口误(顺序表、链式表),你听错了?

  线性表,直接前驱,直接后继,顺序表,链表,指针,指针变量 ,结点,数据域,

  线性表(linear_list)是属于同一个数据对象的数据元素的有限序列.通常表示为:

  线性表是一种最常用的数据结构,数据元素之间的关系表现为:除第一个元素无直接前驱,最后一个元素无直接后继外,其余元素均有且仅有一个直接前驱和一个直接后继.线性表的存储结构有两种实现方法式:顺序存储和链式存储.

  用顺序存储方法存储的线性表简称为顺序表(Sequential List).

  不失一般性,设线性表中所有结点的类型相同,则每个结点所占用存储空间大小亦相同.假设表中每个结点占用c个存储单元,其中第一个单元的存储地址则是该结点的存储地址,并设表中开始结点a1的存储地址(简称为基地址)是LOC(a1),那么结点ai的存储地址LOC(ai)可通过下式计算:

  在顺序表中,每个结点ai的存储地址是该结点在表中的位置i的线性函数.只要知道基地址和每个结点的大小,就可在相同时间内求出任一结点的存储地址.是一种随机存取结构.

  其中data是一维数组,MAXSIZE是数组data所能容纳元素的最大值,也称为顺序表的容量;length是线性表当前的实际长度,线,…,length 个元素分别存放在数组第0,1,…, length -1的位置上;datatype是线性表元素的类型,应视具体情况而定,可以是整形,字符型等,例如线性表是英文字母表,则datatype就是字符型.

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

  在顺序表中,结点的物理顺序必须和结点的逻辑顺序保持一致,因此必须将表中位置为n ,n-1,…,i上的结点,依次后移到位置n+1,n,…,i+1上,空出第i个位置,然后在该位置上插入新结点x.仅当插入位置i=n+1时,才无须移动结点,直接将x插入表的末尾.

  (2)由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分的利用;

  算法的时间主要花费在for循环中的结点后移语句上.该语句的执行次数是n-i+1.

  线性表的删除运算是指将表的第i(1≤i≤n)个结点删去,使长度为n的线,…,an)

  在顺序表上实现删除运算必须移动结点,才能反映出结点间的逻辑关系的变化.若i=n,则只要简单地删除终端结点,无须移动结点;若1≤i≤n-1,则必须将表中位置i+1,i+2,…,n的结点,依次前移到位置i,i+1,…,n-1上,以填补删除操作造成的空缺.

  ②移动结点的平均次数,顺序表上做删除运算,平均要移动表中约一半的结点,平均时间复杂度也是0(n).

  ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)

  ② 链表中结点的逻辑次序和物理次序不一定相同.为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))

  链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线.链表的结点结构

  算法思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志为止.

  (1)由于开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的操作就和在表的其它位置上操作一致,无须进行特殊处理;

  (2)无论链表是否为空,其头指针都是指向头结点的非空指针(空表中头结点的指针域空),因此空表和非空表的处理也就统一了.

  算法思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志为止.

  在链表中,即使知道被访问结点的序号i,也不能像顺序表中那样直接按序号i访问结点,而只能从链表的头指针出发,顺链域next逐个结点往下搜索,直至搜索到第i个结点为止.因此,链表不是随机存取结构.

  计数器j置为0后,扫描指针p指针从链表的头结点开始顺着链扫描.当p扫描下一个结点时,计数器j相应地加1.当j=i时,指针p所指的结点就是要找的第i个结点.而当p指针指为null且j≠i时,则表示找不到第i个结点.

  {/*在带头结点的单链表head中查找第i个结点,若找到(0≤i≤n),

  插入运算是将值为x的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间.

  (1)找到ai-1的存储位置p(因为在单链表中结点ai的存储地址是在其直接前趋结点ai-1的指针域next中)

  当i=n+1时,虽然被删结点不存在,但其前趋结点却存在,它是终端结点.因此被删结点的直接前趋*p存在并不意味着被删结点就一定存在,仅当*p存在(即p!=NULL)且*p不是终端结点(即p-next!=NULL)时,才能确定被删结点存在.

  线性表的链式存储结构一般来说克服了顺序存储结构的三个弱点,首先,插入和删除操作不需要移动元素,只修改指针;其次,不需要预先分配空间,可根据需要动态申请空间;其三是表容量只受可用内存空间的限制.

  顺序表和链表各有优缺点.在实际应用中究竟选用哪一种存储结构呢 这要根据具体问题的要求和性质来决定.通常有以下几方面的考虑:

  静态分配.程序执行之前必须明确规定存储规模.若线性表长度n变化较大,则存储规模难于预先确定估计.过大将造成空间浪费,估计太小又将使空间溢出机会增多.

  动态分配只要内存空间尚有空闲,就不会产生溢出.因此,当线性表的长度变化较大,难以估计其存储规模时,以采用动态链表作为存储结构为好.

  9.非空的单向循环链表的尾结点满足( )(设头指针为head,指针p指向尾结点).

  10.在一个单链表中,p,q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用语句( ).

  1.已知L是无表头结点的单链表,且P结点既不是首结点也不是尾结点,试添加合适的语句序列.

  4.顺序表中,逻辑上相邻的元素物理位置 相邻;单链表中逻辑上相邻的元素物理位置 相邻.

  2.不管单链表是否为空,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一.

  在王立柱所著《C/C++与数据结构》第8章链表(132页)好像有提到,如需要此资料联系。

  展开全部顺序链表顺序链表其实就是一个动态的数组而已。在该链表的结构体中包含链表的基地址和链表当前的长度和链表当前已分配的存储容量。注意:顺序链表不和单链表和双链表一样,它并不是每个元素都包含在一个结点里面。它是类似于数组,有一个类似数组名的基地址和一个表示链表当前长度的变量以及一个表示当前已分配容量的变量。并且这些均属于整个链表。并不属于某个元素。#include iostreamusing namespace std;

  int *elem; //基地址指针,可以理解为就是一个动态数组的名字而已

http://lusobeat.com/xianxingcixu/32.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有