数据结构(习题一)
数据结构习题课1

(IF A[i] A[j] THEN(fmax A[j]. fmin A[i]).
ELSE (fmax A[i]. fmin A[j]). RETURN). BS2. [取中值] mid (ij)/2 BS3. [递归调用]
BS (A, i, mid. gmax, gmin). BS (A, mid1, j. hmax,
IF (n≤1) THEN (flag←false. RETURN.) S2[初始化]
i←2. flag←true. S3[求余判断]
WHILE (i ≤ n div 2 ) DO (IF (n MOD i)=0 THEN (flag←false. RETURN.) i←i+1.) ▌
参考答案3
算法 S (n. flag) /*判断整数n是否为素数,将结果保存到变量flag*/ S1[n≤1?]
for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) ;
int t=1; while(t<n) t*=2;
int t=2; while(t<n) t*=t;
作业1-5
题目描述
试用ADL语言编写一个算法,判断任一整数 n 是否为素数
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) t=a[i][j],a[i][j]=a[j][i],a[j][i]=t;
for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) a[j][i]=[i][j];
数据结构习题1-3及其答案

1.设n为正整数,利用大"O"记号,将下列程序段的执行时间表示为n的函数。
(1) i=1; k=0;while(i<n){ k=k+10*i;i++;}(2) i=1; j=0;while(i+j<=n){if (i>j) j++;else i++;}(3)x=n; // n>1while (x>=(y+1)*(y+1))y++;第二章线性表2.1下述算法的功能是什么?LinkList Demo(LinkList L){ // L是无头结点单链表ListNode *Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;}// Demo答:该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。
2.9设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。
答:因已知顺序表L是递增有序表,所以只要从顺序表终端结点(设为i位置元素)开始向前寻找到第一个小于或等于x的元素位置i后插入该位置即可。
在寻找过程中,由于大于x的元素都应放在x之后,所以可边寻找,边后移元素,当找到第一个小于或等于x的元素位置i时,该位置也空出来了。
算法如下://顺序表存储结构如题2.7void InsertIncreaseList( Seqlist *L , Datatype x ){int i;if ( L->length>=ListSize)Error(“overflow");for ( i=L -> length ; i>0 && L->data[ i-1 ] > x ; i--)L->data[ i ]=L->data[ i ] ; //比较并移动元素L->data[ i ] =x;L -> length++;}2.14已知单链表L是一个递增有序表,试写一高效算法,删除表中值大于min且小于max的结点(若表中有这样的结点),同时释放被删结点的空间,这里min和max是两个给定的参数。
数据结构与算法设计-习题1-3

int
data;
struct Lnode *next;
// 数据域 // 指针域
} LNode, *LinkList; LinkList la, lb; // 单链表的头指针 请用 la 和 lb 中的结点合并生成一个新的非 递增的有序单链表 lc。合并完成后,原来的 la 和 lb 成为空链表。
作者 (时间 2000年) 北京理工大学计算机科学工程系 秦怀青 email qinhq010@
正确且高效的算法如下: Status DeleteK(SqList &a ,int i, int k) {//设线性表元素从a.base[1]起存储,从第i个元素起
删除k个元素。
if ( i<1|| k< 0 || (i+k)>a.length) return ERROR;
for ( j=i+k;j<=a.length; ++j)
操作步骤
1) 建空表 Lc; 2) 依次从 La 或 Lb 中“摘取”元素值较小的
结点插入到 Lc 表中第一个结点之前直至其 中一个表变空为止; 3) 继续将 La 或 Lb 其中一个表的剩余结点插 入在 Lc 表的表头结点之后; 4) 释放 La 表和 Lb 表的表头结点。
作者 (时间 2000年) 北京理工大学计算机科学工程系 秦怀青 email qinhq010@
单链表中逻辑上相邻的元素的物理位置 不一定 紧邻。
(3)在单链表中,除了头结点外,任一结点的存储位置 由 该结点的直接前趋 指示。
(4)在单链表中设置头结点的作用是
在表的第一个元素结点之前插入新元素结点或删除 第一个元素结点不需修改头作指者 针(时间 2000年)
数据结构习题和答案及解析

第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑与处理。
【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()与()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()与()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()与()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()与()四种,其中,()被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫与妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
计算机数据结构习题1附答案

文档来源为:从网络收集整理.word 版本可编辑.欢迎下载支持.第1章 绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。
解:数据是对客观事物的符号表示。
在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据对象是性质相同的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
存储结构是数据结构在计算机中的表示。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
是对一般数据类型的扩展。
1.2 填空题:1.常见的数据结构有__结构,_____结构,____结构等三种。
2.常见的存储结构有_________结构,______结构等两种。
3.数据的基本单位是____,它在计算机中是作为一个整体来处理的。
4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类,______和_____。
5.《数据结构》课程讨论的主要内容是数据的逻辑结构、存储结构和________。
1.2设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。
解:1.3设有以下三个函数:()10002124++=n n n f ,()3450015n n n g+=,()n n n n h log 5005.3+=请判断以下断言正确与否:(1) f(n)是O(g(n)) (2) h(n)是O(f(n)) (3) g(n)是O(h(n)) (4) h(n)是O(n 3.5) (5) h(n)是O(nlogn)解:(1)对 (2)错 (3)错 (4)对 (5)错第二章序列2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
数据结构习题

图习题(三)
• 1.如图所示是一个无向网图,请分别按Prim 算法和Kruskal算法求最小生成树。
查找习题(一)
1.已知一个有序表为(12,18,24,35,47,50,62,83,90,115,134), 当折半查找值为 90 的元 素时,经过( )次比较后查找成功。 A2 B3 C4 D5 2.已知 10 个元素(54,28,16,73,62,95,60,26,43),按照依次插入 的方法生成一棵二叉排序树,查找值为 62 的结点所需比较次数为( )。 A2 B3 C4 D5 3.已知数据元素为(34,76,45,18,26,54,92,65),按照依次插入结点 的方法生成一棵二叉排序树,则该树的深度为( )。 A4 B5 C6 D7 4.按( )遍历二叉排序树得到的序列是一个有序序列。 A 前序 B 中序 C 后序 D 层次 5.在散列函数 H(k)= k mod m 中,一般来讲,m 应取( )。 A 奇数 B 偶数 C 素数 D 充分大的数
8.设链栈中结点的结构:data为数据域,next为指针域,且top是栈顶指针。若想 在链栈的栈顶插入一个由指针s所指的结点,则应执行下列( )操作。 A.s->next=top->next;top->next=s; B.top->next=s; C.s->next=top;top=top->next; D.s->next=top;top=s;
D.根据元素查找
线性表习题(二)
1.链表相对于顺序表的优点是: 插入、删除 方便。 2.顺序表中访问任意一个结点的时间复杂度均为 O(1) 。 3.在单链表中要在已知结点*P之前插入一个新结点,需找到 *P的直接前趋结点的地址,其查找的时间复杂度为 O(n) 。 4.单链表中需知道 头指针 才能遍历整个链表。 5.在一个长度为n的顺序表中删除第i个元素,要移动 n-i 个元 素。 6.在一个长度为n的顺序表中,如果要在第i个元素前插入一 个元素,要后移 n-i+1 个元素。 7.双链表中,设p是指向其中待删除的结点,则需要执行的操 作为: p->prior->next=p->next 。
数据结构练习题1

数据结构练习题1、在数据结构中,从逻辑上可以把数据结构分成A、动态结构和静态结构B、紧凑结构和非紧凑结构B、线性结构和非线性结构D、内部结构和外部结构2、线性表的顺序存储结构是一种_____的结构,线性表的链式存储结构是一种____的存储结构A、随机存取B、顺序存取C、索引存储D、散列存取3、线性表若采用链式存储结构时,要求内存中可用存储单元的地址____A、必须是连续的B、部分地址必须是连续的B、一定是不连续的D、连续或不连续都可以4、在下列叙述中,正确的是____A、线性表的顺序存储结构优于链表存储结构B、二维数组是其数据元素为线性表的线性表C、栈的操作方式是先进先出D、队列的操作方式是先进后出5、一个顺序表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是___A、110B、108C、100D、1206、一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是____A、edcbaB、decbaC、dceabD、abcde7、一个栈的入队序列是1,2,3,4,则队列的输出序列是____A、4,3,2,1B、1,2,3,4C、1,4,3,2D、3,2,4,18、判定一个栈ST空的(最多元素为m0)为空的条件是_____A、ST->top!=0B、ST->top= =0C、S T->top!=m0D、ST->top= =m09、判定一个栈(最多元素为m0)为满的条件是_____A、ST->top!=0B、ST->top= =0D、ST->top!=m0 D、ST->top= =m010、判定一个队列QU(最多元素为m0)为空的条件是_____A、QU->rear-QU->front= =m0B、Q U->rear-QU->front-1= =m0C、Q U->front= =QU->rearD、QU->front= =QU->rear+111、判定一个队列QU(最多元素为m0)为空的条件是_____A、QU->rear-QU->front= =m0B、QU->rear-QU->front-1= =m0C、QU->front= =QU->rearD、QU->front= =QU->rear+112、判定一个循环队列QU(最多元素为m0)为空的条件是_____A、QU->rear-QU->front= =m0B、QU->rear-QU->front-1= =m0C、QU->front= =(QU->rear+1)%m0D、QU->front! =(QU->rear+1)%m013、判定一个循环队列QU(最多元素为m0)为满的条件是_____A 、QU->rear -QU->front= =m0B 、QU->rear -QU->front -1= =m0C 、QU->front= =(QU->rear+1)%m0D 、QU->front! =(QU->rear+1)%m014、循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front 和rear ,则当前队列中的元素个数是_____A 、(rear -front+m )%mB 、rear -front+1C 、rear -front-1E 、 rear -front15、如下图所示的4棵二叉树中,____不是完全二叉树。
数据结构练习题及答案

数据结构练习题(一)一、单选题1.栈和队列的共同特点是( )。
A.只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.用链接方式存储的队列,在进行插入运算时( )。
A. 仅修改头指针B. 头、尾指针都要修改C. 仅修改尾指针D.头、尾指针可能都要修改3.以下数据结构中( )是非线性结构。
A. 队列B. 栈C. 线性表D. 二叉树4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在()位置。
脚注(10)表示用10进制表示。
A.688 B.678 C.692 D.6965.树最适合用来表示( )。
A.有序数据元素B.无序数据元素C.元素之间具有分支层次关系的数据D.元素之间无联系的数据6.二叉树的第k层的结点数最多为( )。
A.2k-1 +1 D. 2k-17.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( )。
A. 1,2,3B. 9,5,2,3C. 9,5,3D. 9,4,2,38.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K %9作为散列函数,则散列地址为1的元素有()个。
A.1 B.2 C.3 D.49.设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。
二、填空题1.通常从四个方面评价算法的质量:_________、_________、_________和_________。
2.一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。
3.假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数为__________个,树的深度为___________,树的度为_________。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二部分
线性表
考点一 线性表的定义和基本操作
2. 以下关于线性表的说法不正确的是 (C ) A. 线性表中的数据元素可以是数字、字符、记录等不同类型 B. 线性表中包含的数据元素个数不是任意的 C. 线性表中的每个结点都有且只有一个直接前趋和直接后继 D. 存在这样的线性表:表中各结点都没有直接前趋和直接后 继
第二部分
线性表
考点二 线性表的顺序存储
本考点主要考查: 1、 线性表的顺序存储结构的类型定义; 2、 线性表在顺序存储结构上的算法实现,及相应的时间 复杂度。
第二部分
线性表
考点二 线性表的顺序存储
1. 在 n 个结点的线性表的数组实现中,算法的时间复杂度 是 O(1)的操作是 (A )
A. 访问第 i( 1<=i<=n)个结点和求第 i 个结点的直接前 驱( 1<i<=n) B. 在第 i( 1<=i<=n)个结点后插入一个新结点 C. 删除第 i( 1<=i<=n)个结点 D. 以上都不对
第二部分
线性表
考点三 线性表的链式存储
2. 在循环双链表的p所指的结点之前插入s所指结点的操作是 ( D ) A. p->prior = s;s->next = p;p->prior->next = s;s->prior = p->prior B. p->prior = s;p->prior->next = s;s->next = p;s->prior = p>prior C. s->next = p;s->prior = p->prior;p->prior = s;p->prior>next = s D. s->next = p;s->prior = p->prior;p->prior->next = s;p>prior = s 总结方法: (1). 先解决待插入结点s的两个指针域(s的 两个指针域的调整,可以交换顺序); (2). 再解决s结点的前驱结点p和后继结点q 的指针域(p和q的指针域调整,也可以交 换顺序,但是当题目只告知p和q当中的一 个时,另作考虑。如本题只告诉p,则只能 先让p的前驱结点的后继指针指向s,再调整 p的前驱指针指向s)。
第二部分
线性表
考点二 线性表的顺序存储
3. 顺序表中, 在任何一个位置插入元素的概率相等,则插 入一个元素所需移动的元素平均数是( D )。 A. (n-1)/2 B. n C. n+1 D. n/2
4. 在表长为 n 的顺序表中,当在任何位置删除一个元素的 概率相同时,删除一个元素所需移动的平均个数为( A )。 A. (n-1)/2 B. n/2 C. (n+1)/2 D. n
对顺序表的读取操作,时间复杂度为 O(1),故而 A 答案正确。 假设 i 是随机的,则在第 i 个位置之后插入一个新结 点平均需要移动近一半表长的元素,时间复杂度为 O(n)。 同理,删除第 i 个元素的时间复杂度也是 O(n)。 所以,B、 C 答案错误。
第二部分
线性表
考点二 线性表的顺序存储
第三部分
栈、队列和数组
(B )
考点一 栈和队列的概念和基本操作
2. 由两个栈共享一个向量空间的好处是: A. 减少存取时间,降低下溢发生的机率 B. 节省存储空间,降低上溢发生的机率 C. 减少存取时间,降低上溢发生的机率 D. 节省存储空间,降低下溢发生的机率
两栈共享空间,指的是使用一个数组来存储两个栈,让一个栈的栈底 为该数组的始端,另一个栈的栈底为该数组的末端,两个栈从各自的 栈底向中间延伸。
对算法的讨论不能只研究它是否能在有穷步内终止,还应 对算法的运行效率作出分析,判断算法的好坏,以便在已 有的资源条件下作出最佳的决策。
第一部分
绪 论
考点二 算法以及算法的时间复杂度和空间复杂度
2. 设语句 x++的时间是单位时间,则以下语句的时间复杂 度为 (B ) for(i=1; i<=n; i++) for( j=i; j<=n; j++) x++; A. O(1) B. O(n2) C. O(n) D. O(n3) 我们常说的分析算法的时间复杂度,就是分析算法的规 模 n 的函数 f(n)。本题中存在着两层 for 循环,当 i=1 时,内层循环执行 n 次,当 i=2 时内层循环执行 n-1 次…,分析可知,总共执行了近O(n2)。 要特别注意,在分析时间复杂度时,我们通常采用抓取 大端的办法,进行粗略估计,不会进行详细计算。
第三部分
栈、队列和数组
考点一 栈和队列的概念和基本操作
本部分考查栈和队列的概念,以及基本操作。请注意栈和队 列的性质,并掌握二者的基本操作。
第三部分
栈、队列和数组
考点一 栈和队列的概念和基本操作
1. 设有一个栈,元素依次进栈的顺序为A、B、C、D、E。 下列( C )是不可能的出栈序列。 A. A,B,C,D,E B. B,C,D,E,A C. E,A,B,C,间复杂度的概念,计算方法, 数量级表示。学会通过 for 循环或者 while 循环来计算算法 的时间复杂度。
第一部分
绪 论
( C )
考点二 算法以及算法的时间复杂度和空间复杂度
1. 算法分析的目的是 A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性
第一部分
绪 论
考点一 数据的逻辑结构、存储结构
3. 数据结构 DS(Data Struct)可以被形式地定义为 DS= ( D, R),其中 D是( B )的有限集合, R 是 D 上的关 系有限集合。 A. 算法 B. 数据元素 C. 数据操作 D. 数据对象
第一部分
绪 论
考点二 算法以及算法的时间复杂度和空间复杂度
从上图可以看出,共享栈更加有效地利用存储空间。而且两个栈可以相 互调节,只有当top2=top1+1时,元素占满了数组的全部空间,栈才 发生上溢。因而,共享栈降低了上溢发生的概率。但是栈的存取都是 O(1)的时间复杂度,并没有减少存取时间。
具体分析见教材P25
第二部分
线性表
考点三 线性表的链式存储
本考点主要考查: 1、链接存储的概念; 2、单链表、双链表和循环链表的相关概念和基本操作; 3、线性表在链式存储上的算法实现,以及相应的时间复杂 度。
第二部分
线性表
考点三 线性表的链式存储
1. 在一个长度为n(n>1)的单链表上,设有头和尾两个 指针,分别指向该链表的第一个结点和最后一个结点,则 执行( B )操作与链表的长度有关。 A. 删除单链表中的第一个元素 B. 删除单链表中的最后一个元素 C. 在单链表第一个元素前插入一个新元素 D. 在单链表最后一个元素后插入一个新元素
第二部分
线性表
考点三 线性表的链式存储
3. 已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假 设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链 表应执行的语句为 (A ) A. q->next=s->next;s->next=p; B. s->next=p;q->next=s->next; C. p->next=s->next;s->next=q; D. s->next=q;p->next=s->next; 在指针s指向的某一个结点之后插入一段以p和q分别指向第一个结点和 最后一个结点的链表,只需要令q的指针域指向s的后继结点(q>next=s->next),再调整s的指针域,使其指向新的后继结点p即可 (s->next=p),如下图所示。
第一部分
绪 论
(C )
考点二 算法以及算法的时间复杂度和空间复杂度 3. 下面程序段的时间复杂度是 for(i=0;i<m;i++) for( j=0;j<n;j++) a[i][ j]=i*j;
A. O(m2) B. O(n2) C. O(m*n)
D. O(m+n)
题中的程序有两层 for 循环,外层循环执行 m 次,而每 执行一次外层循环,内层循环需要执行 n 次,故而总共 执行 mn次,算法的时间复杂度为O(mn)。
2. 在一个长度为 n 的顺序表中删除第 i 个元素,需要向前 移动 ( A )个元素。 A. n-i B. n-i+1 C. n-i-1 D. i+1
本题考查顺序表删除元素时表的元素移动情况。在一个长 度为 n 的顺序表中删除第 i 个元素,第 i+1 个位置的元素 移到第原第 i 个位置,第 i+2 个位置的元素移动到第i+1 个位置, …,第 n 个位置的元素移动到第 n-1 个位置,共 需移动 n-i 个元素。
对于A答案,A元素进栈出栈、B元素进栈出栈、C元素进栈出栈、D元 素进栈出栈、E元素进栈出栈,即可得到出栈序列A、B、C、D、E。 对于B答案,将A压入栈底,然后B元素进栈出栈、C元素进栈出栈、D 元素进栈出栈、E元素进栈出栈,即可得到出栈序列B、C、D、E、A。 对于D答案,将A、B、C、D、E五个元素依次压栈,再出栈,即可得到 序列E、D、C、B、A。 对于C答案,要保证E先出栈,那么A、B、C、D四个元素只能压栈而不 能出栈。也就是说,若出栈序列以E开头,则只有一个序列E、D、C、B、 A,故而该答案错误。
线性表中的数据元素具有抽象(即不确定)的数据类型, 可以是 数字、字符、记录等不同类型, 在设计具体的应用程序时,数据元素 的抽象类型将被具体的数据类型所取代。 线性表中包含的数据元素个数不是任意的,必须是有限的。 在一个非空表 L=( a1, a2,……an)中,任意一对相邻的数据元素 ai-1 和 ai 之间(1<i≦n)存在序偶关系(ai-1,ai),且 ai-1 称为 ai 的前驱, ai 称为 ai-1 的后继。在这个序列中, a1 无前驱,an 无后继,其他每个元 素有且仅有一个前驱和一个后继。 若为空表,或者表中只有一个元素,则该元素没有直接前驱结点, 也没有直接后继结点