数据结构经典算法试题

合集下载

数据结构与算法分析考试试题

数据结构与算法分析考试试题

数据结构与算法分析考试试题一、选择题(共 20 小题,每小题 3 分,共 60 分)1、在一个具有 n 个元素的顺序表中,查找一个元素的平均时间复杂度为()A O(n)B O(logn)C O(nlogn)D O(n²)2、以下数据结构中,哪一个不是线性结构()A 栈B 队列C 二叉树D 线性表3、一个栈的入栈序列是 1,2,3,4,5,则栈的不可能的出栈序列是()A 5,4,3,2,1B 4,5,3,2,1C 4,3,5,1,2D 1,2,3,4,54、若一棵二叉树的先序遍历序列为 ABCDEFG,中序遍历序列为CBDAEGF,则其后序遍历序列为()A CDBGFEAB CDBFGEAC CDBAGFED BCDAGFE5、具有 n 个顶点的无向完全图的边数为()A n(n 1)B n(n 1) / 2C n(n + 1) / 2D n²6、以下排序算法中,在最坏情况下时间复杂度不是O(n²)的是()A 冒泡排序B 选择排序C 插入排序D 快速排序7、在一个长度为 n 的顺序表中,删除第 i 个元素(1≤i≤n)时,需要向前移动()个元素。

A n iB iC n i + 1D n i 18、对于一个具有 n 个顶点和 e 条边的有向图,其邻接表表示中,所有顶点的边表中边的总数为()A eB 2eC e/2D n(e 1)9、以下关于哈夫曼树的描述,错误的是()A 哈夫曼树是带权路径长度最短的二叉树B 哈夫曼树中没有度为 1 的节点C 哈夫曼树中两个权值最小的节点一定是兄弟节点D 哈夫曼树中每个节点的权值等于其左右子树权值之和10、用邻接矩阵存储一个具有 n 个顶点的无向图时,矩阵的大小为()A nB n²C (n 1)²D (n + 1)²11、下列关于堆的描述,正确的是()A 大根堆中,每个节点的值都大于其左右子节点的值B 小根堆中,每个节点的值都小于其左右子节点的值C 堆一定是完全二叉树D 以上都对12、在一个具有 n 个单元的顺序存储的循环队列中,假定 front 和rear 分别为队头指针和队尾指针,则判断队满的条件是()A (rear + 1) % n == frontB (front + 1) % n == rearC rear == frontD rear == 013、已知一个图的邻接表如下所示,从顶点 1 出发,按深度优先搜索法进行遍历,则得到的一种可能的顶点序列为()|顶点|邻接顶点|||||1|2, 3||2|4, 5||3|5||4|6||5|6||6| |A 1, 2, 4, 6, 5, 3B 1, 2, 5, 3, 4, 6C 1, 2, 3, 5, 4, 6D 1, 3, 2, 4, 5, 614、对线性表进行二分查找时,要求线性表必须()A 以顺序方式存储,且元素按值有序排列B 以顺序方式存储,且元素按值无序排列C 以链式方式存储,且元素按值有序排列D 以链式方式存储,且元素按值无序排列15、以下算法的时间复杂度为 O(nlogn)的是()A 顺序查找B 折半查找C 冒泡排序D 归并排序16、若某链表最常用的操作是在最后一个节点之后插入一个节点和删除最后一个节点,则采用()存储方式最节省时间。

数据结构试题及答案(十套)

数据结构试题及答案(十套)

一、单选题(每题 2 分,共20分)1.对一个算法的评价,不包括如下(B )方面的内容。

A.健壮性和可读性B.并行性C.正确性D.时空复杂度2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。

A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3.对线性表,在下列哪种情况下应当采用链表表示?( )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( C )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 35.AOV网是一种()。

A.有向图B.无向图C.无向无环图D.有向无环图6.采用开放定址法处理散列表的冲突时,其平均查找长度()。

A.低于链接法处理冲突 B. 高于链接法处理冲突C.与链接法处理冲突相同D.高于二分查找7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。

A.值B.函数C.指针D.引用8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的()。

A.行号B.列号C.元素值D.非零元素个数9.快速排序在最坏情况下的时间复杂度为()。

A.O(log2n) B.O(nlog2n)C.0(n) D.0(n2)10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。

A. O(n)B. O(1)C. O(log2n)D. O(n2)二、运算题(每题 6 分,共24分)1.数据结构是指数据及其相互之间的______________。

当结点之间存在M对N (M:N)的联系时,称这种结构为_____________________。

数据结构与算法习题集 习题集

数据结构与算法习题集 习题集

数据结构习题集一、选择题1.在一个长度为n的顺序表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需向后移动B个元素。

A. n-1B. n-i+1C. n-i-1D. i2.在一个具有n个单元的顺序栈中,假定以地址低端作为栈底,以top作为栈顶指针,则当做退栈处理时,top变化为C。

A. top不变B. top=-n C. top=top-1 D. top=top+13.向顺序栈中压入元素时,是A。

A. 先存入元素,后移动栈顶指针B.先移动栈顶指针,后存入元素4.在一个顺序存储的循环队列中,队首指针指向队首元素的A。

A. 前一个位置B. 后一个位置C. 队首元素位置D. 队尾元素位置5.若进栈序列为1,2,3,4,进栈过程中可以出栈,则C不可能是一个出栈序列。

A. 3,4,2,1B. 2,4,3,1C. 1,4,2,3D. 3,2,1,46.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队空的条件是C。

A. front= =rear+1B. front+1= =rearC. front= =rearD. front= =07.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队满的条件是D。

A. rear % n= =frontB. (rear-1) % n= =frontC. (rear-1) % n= =rearD. (rear+1) % n= =front8.从一个具有n个节点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较D个结点。

A. nB. n/2C. (n-1)/2D. (n+1)/29.在一个单链表中,已知*q结点是*p结点的前驱结点,若在*q和*p之间插入*s结点,则执行C。

A. s->next=p->next; p->next=s;B. p->next=s->next; s->next=p;C. q->next=s; s->next=p;D. p->next=s; s->next=q;10.向一个栈项指针为hs的链栈中插入一个*s结点时,则执行C。

数据结构与算法试卷

数据结构与算法试卷

一、填空题(每空2分,共12分)1. 数据结构被形式地定义为(D, R ),其中D 是数据元素的有限集合,R 是D上的__数据元素之间的关系______ 有限集合。

2.向一个长度为n 的线性表中删除第i 个元素(1≤i ≤n)时,需向前移动___n-i_____个元素。

3. 假设以S 和X 代表进栈和出栈操作,则对输入序列a,b,c,d,e 进行一系列操作SSXSXSSXXX 之后,得到的输出序列为___bceda_____。

4. 已知循环队列的存储空间为数组A[21],front 指向队头元素的前一个位置,rear 指向队尾元素,假设front 和rear 的值分别为8和3,则该队列的长度为___16_____。

5.在有序表A[0…17]中,采用折半查找法查找关键字等于A[7]的元素,需比较元素的下标依次为 8 3 5 6 7 。

6. 在堆排序、快速排序和归并排序方法中,稳定的排序方法是 归并排序 。

二、单项选择题(每小题2分,共40分)1. 数据结构中,与所使用的计算机无关的是数据的( C )结构。

A.存储B. 物理C. 逻辑D.物理和存储2. 算法分析的两个主要方面是( A )A. 空间复杂性和时间复杂性B. 正确性和简明性C. 可读性和文档性D. 数据复杂性和程序复杂性3.在n 个结点的顺序表中,算法的时间复杂度是O (1)的操作是( A )A.访问第i 个结点(1≤i ≤n )和求第i 个结点的直接前驱(2≤i ≤n )B.在第i 个结点后插入一个新结点(1≤i ≤n )C.删除第i 个结点(1≤i ≤n )D. 将n 个结点从小到大排序 4. 线性表L在( B )情况下适用于使用链式结构实现。

A.需经常修改L中的结点值B.需不断对L进行删除插入C.L中含有大量的结点D.L中结点结构复杂 5. 经过以下栈运算后,x 的值是( A )InitStack(s); Push(s, 'a');Push(s, 'b');Pop(s,x);GetTop(s,x); A.a B.b C.1 D.06. 循环队列存储在数组A[0…m]中,则入队时的操作为( D )。

数据结构与算法试题

数据结构与算法试题

数据结构与算法试题题目一:栈与队列1.1 栈的定义和基本操作栈是一种先进后出的数据结构,可以通过push操作将元素入栈,通过pop操作将栈顶元素出栈。

请问如何实现一个栈,并给出相关的操作函数和实例演示。

1.2 队列的定义和基本操作队列是一种先进先出的数据结构,可以通过enqueue操作将元素入队,通过dequeue操作将队首元素出队。

请问如何实现一个队列,并给出相关的操作函数和实例演示。

题目二:排序算法2.1 冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历要排序的元素,依次比较相邻的两个元素,并按照大小进行交换。

请问如何实现冒泡排序,给出时间复杂度和空间复杂度。

2.2 快速排序快速排序是一种常用的排序算法,它采用分治的思想,将数组分割成两个子数组,然后递归地对子数组进行排序。

请问如何实现快速排序,给出时间复杂度和空间复杂度。

题目三:查找算法3.1 二分查找二分查找是一种常见的查找算法,它要求查找的序列是有序的。

请问如何实现二分查找,给出时间复杂度和空间复杂度。

3.2 哈希表查找哈希表是一种高效的查找数据结构,通过将关键字映射到特定的位置来进行查找。

请问如何实现哈希表查找,给出时间复杂度和空间复杂度。

题目四:图算法4.1 图的定义和表示图是由节点和边构成的一种数据结构,可以用邻接矩阵或邻接表来表示。

请问如何定义和表示一个图,给出相关的数据结构和实例演示。

4.2 深度优先搜索和广度优先搜索深度优先搜索和广度优先搜索是常用的图算法,用于遍历图中的所有节点。

请问如何实现深度优先搜索和广度优先搜索,给出相应的算法和实例演示。

总结:在本文中,我们介绍了数据结构与算法中的一些常见题目,包括栈与队列、排序算法、查找算法以及图算法。

我们讨论了它们的定义、基本操作、实现方法以及相应的时间复杂度和空间复杂度。

这些内容对于理解和掌握数据结构与算法有着重要的意义,希望能够对读者有所帮助。

《数据结构与算法》试卷

《数据结构与算法》试卷

一、选择题1.下列哪种数据结构适合用于实现优先队列?A.栈B.队列C.二叉堆(正确答案)D.链表2.在进行图的深度优先搜索(DFS)时,使用哪种数据结构可以帮助记录已访问过的顶点,从而避免重复访问?A.栈B.队列C.集合(正确答案)D.哈希表3.下列排序算法中,哪种算法的时间复杂度在最坏情况下为O(n2),但在平均情况下和最好情况下可以达到O(nlogn)?A.快速排序(正确答案)B.归并排序C.堆排序D.插入排序4.在二叉树的遍历中,前序遍历的顺序是?A.根节点-> 左子树-> 右子树(正确答案)B.左子树-> 根节点-> 右子树C.左子树-> 右子树-> 根节点D.根节点-> 右子树-> 左子树5.下列哪种查找算法在有序数组中查找特定元素时,具有最优的时间复杂度O(logn)?A.顺序查找B.二分查找(正确答案)C.插值查找D.斐波那契查找6.在哈希表中,处理哈希冲突的一种常见方法是?A.开放寻址法(正确答案)B.链地址法C.再哈希法D.以上都是7.下列关于二叉搜索树(BST)的说法中,哪一项是正确的?A.在BST中,每个节点的左子树只包含小于该节点的数B.在BST中,每个节点的右子树只包含大于该节点的数C.在BST中,每个节点的左子树只包含小于该节点的数,右子树只包含大于该节点的数(正确答案)D.BST中不允许有重复值的节点8.下列哪种算法是解决最短路径问题的经典算法,适用于带权重的图?A.迪杰斯特拉算法(Dijkstra)(正确答案)B.弗洛伊德算法(Floyd)C.贝尔曼-福特算法(Bellman-Ford)D.A*算法(A-star)。

数据结构与算法经典例题

数据结构与算法经典例题

1、在二叉搜索树(BST)中,以下哪个遍历顺序会按从小到大的顺序访问所有节点?A. 前序遍历B. 中序遍历C. 后序遍历D. 层次遍历(答案:B)2、对于一个给定的无向图,以下哪种算法最适合找到从起点到终点的最短路径(假设所有边的权重都相等)?A. Dijkstra算法B. Bellman-Ford算法C. Floyd-Warshall算法D. 广度优先搜索(BFS)(答案:D)3、在哈希表中处理冲突的一种方法是链地址法(也称为拉链法),以下关于链地址法的说法错误的是:A. 每个哈希表槽位连接一个链表B. 当发生冲突时,新元素添加到对应槽位的链表末尾C. 链地址法不需要处理哈希函数的设计,因为冲突总是通过链表解决D. 查找、插入和删除操作的时间复杂度与链表的长度有关(答案:C)4、以下哪种数据结构最适合实现优先队列,且支持高效的插入和删除最小(或最大)元素操作?A. 数组B. 链表C. 二叉堆D. 平衡二叉搜索树(如AVL树)(答案:C)5、在快速排序算法中,选择哪个元素作为基准(pivot)对算法的效率有重要影响,以下哪种策略通常不是一个好的选择?A. 数组的第一个元素B. 数组的最后一个元素C. 数组中间的元素D. 随机选择一个元素(答案:视具体情况而定,但通常A、B在特定情况下可能不是最佳,如当数组已近排序时;然而,此题要求选一个“通常不是好选择”的,若必须选一个,可以认为A或B在未知数据分布时风险较高,答案可倾向A或B,这里选A作为示例)6、以下哪个不是图的遍历算法?A. 深度优先搜索(DFS)B. 广度优先搜索(BFS)C. A*搜索算法D. 拓扑排序(答案:D)7、在平衡二叉搜索树(如红黑树)中,以下哪个操作的时间复杂度不是O(log n)?A. 查找B. 插入C. 删除D. 计算树中所有节点的和(答案:D,因为计算所有节点和需要遍历整个树,时间复杂度为O(n))8、以下哪种情况最适合使用动态规划算法来解决?A. 查找无序数组中的最大值B. 对一组数进行排序C. 计算斐波那契数列的第n项D. 在已排序的数组中查找特定元素(答案:C)。

考研数据结构算法题

考研数据结构算法题

1、在二叉搜索树中,若要进行中序遍历,访问根结点的顺序是?A. 第一个访问B. 最后一个访问C. 在左、右子树之间访问D. 不确定,与具体树结构有关(答案)C2、对于给定的无序数组,快速排序在最坏情况下的时间复杂度为?A. O(n)B. O(n log n)C. O(n2)D. O(log n)(答案)C3、在图的深度优先搜索(DFS)过程中,使用栈的主要目的是?A. 记录已访问的顶点B. 记录当前路径上的顶点,以便回溯C. 存储所有邻接顶点D. 确定搜索的起始点(答案)B4、下列哪种情况最适合使用哈希表进行数据存储和查找?A. 数据集合大小固定且较小B. 数据集合频繁变动,且需要快速查找C. 数据元素之间有明显的顺序关系D. 需要经常进行范围查询(答案)B5、在二叉树的后序遍历中,结点的访问顺序是?A. 先访问左子树,再访问右子树,最后访问根结点B. 先访问右子树,再访问左子树,最后访问根结点C. 先访问根结点,再依次访问左右子树D. 依次访问左、右子树,根结点的访问位置不固定(答案)A6、关于并查集(Union-Find)数据结构,下列说法错误的是?A. 主要用于处理一些不交集的合并及查询问题B. 使用路径压缩可以优化查找操作C. 使用按秩合并可以提高合并操作的效率D. 并查集不支持删除操作(注:传统并查集通常不直接支持删除某个特定元素的操作,但可以通过一些变通方法实现)(答案)D(注:此选项表述有争议,但在常见应用中,直接删除不是并查集的标准操作,故选择D作为“错误”的选项)7、在堆排序中,建立最大堆的过程是?A. 从最后一个非叶结点开始,向上调整堆B. 从根结点开始,向下调整堆C. 从第一个元素开始,依次比较并交换位置D. 从中间结点开始,向两端调整堆(答案)A8、下列关于B树(B-Tree)和B+树(B+ Tree)的说法中,错误的是?A. B树和B+树都是平衡树,保证了查找、插入、删除的时间复杂度B. B+树的所有叶结点通过一个链表相连,便于范围查询C. B树的每个结点都存储数据记录的关键字和实际数据D. B+树的内部结点只存储关键字,不存储实际数据,数据只存在于叶结点中(答案)C(注:在B+树中,内部结点只存储关键字,不存储实际数据,数据只存在于叶结点中;而B树的每个结点都可能存储数据记录的关键字和实际数据,但不一定所有结点都存,因此C选项的描述对于B树不完全准确,故选C)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。

请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

【北京大学1998 三、1 (5分)】LinkedList Union(LinkedList la,lb){ pa=la->next; pb=lb->next;la->next=null;while(pa!=null && pb!=null) ∥当两链表均不为空时作if(pa->data<=pb->data){ r=pa->next;pa->next=la->next; ∥将pa结点链于结果表中,同时逆置。

la->next=pa;pa=r;}else{r=pb->next;pb->next=la->next; ∥将pb结点链于结果表中,同时逆置。

la->next=pb;pb=r;}while(pa!=null) ∥将la表的剩余部分链入结果表,并逆置。

{r=pa->next; pa->next=la->next; la->next=pa; pa=r; }while(pb!=null){r=pb->next; pb->next=la->next; la->next=pb; pb=r; }}1)设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。

【南京理工大学1997 四、3(15分)】LinkedList Union(LinkedList ha, hb)∥ha和hb是两个无头结点的数据域值递增有序的单链{LinkedList 表,本算法将hb中并不出现在ha中的数据合并到ha中,合并中不能破坏hb链表。

la;la=(LinkedList)malloc(sizeof(LNode));la->next=ha;pa=ha;pb=hb;pre=la;while(pa&&pb)if(pa->data<pb->data)∥处理ha中数据{pre->next=pa;pre=pa;pa=pa->next;}else if(pa->data>pb->data)∥处理hb中数据。

{r=(LinkedList)malloc(sizeof(LNode));r->data=pb->data; pre->next=r;pre=r;pb=pb->next;}Else∥处理pa- >data=pb->data;{pre->next=pa; pre=pa;pa=pa->next;∥两结点数据相等时,只将ha的数据链入。

pb=pb->next;}if(pa!=null)pre->next=pa;∥将两链表中剩余部分链入结果链表。

else pre->next=pb;free(la);}2)已知头指针分别为la和lb 的带头结点的单链表中,结点按元素值非递减有序排列。

写出将la 和lb两链表归并成一个结点按元素值非递减有序排列的单链表(其头指针为lc),并计算算法的时间复杂度。

【燕山大学1998 五(20分)】pa=la->next;pb=hb->next;lc=(LinkedList )malloc(sizeof(LNode));pc=lc;∥pc是结果链表中当前结点的前驱while(pa&&pb)if(pa->data<pb->data){pc->next=pa;pc=pa;pa=pa->next;}else {pc->next=pb;pc=pb;pb=pb->next;}if(pa)pc->next=pa; else pc->next=pb;free(la);free(lb);∥释放原来两链表的头结点。

2. 设带头结点且头指针为ha和hb的两线性表A和B 分别表示两个集合。

两表中的元素皆为递增有序。

请写一算法求A和B的并集AUB。

要求该并集中的元素仍保持递增有序。

且要利用A和B的原有结点空间。

【北京邮电大学1992 二(15分)】LinkedList Union(LinkedList ha,hb){ pa=ha->next;pb=hb->next;∥设工作指针pa和pb。

pc=ha;∥pc为结果链表当前结点的前驱指针。

while(pa&&pb)if(pa->data<pb->data){pc->next=pa;pc=pa;pa=pa->next;}else if(pa->data>pb->data){pc->next=pb;pc=pb;pb=pb->next;}Else{pc->next=pa;pc=pa;pa=pa->next;∥处理pa->data=pb->data.u=pb;pb=pb->next;free(u);}if(pa) pc->next=pa;∥若ha表未空,则链入结果表。

else pc->next=pb;∥若hb表未空,则链入结果表。

free(hb); return(ha);}1)已知递增有序的两个单链表A,B分别存储了一个集合。

设计算法实现求两个集合的并集的运算A:=A∪B【合肥工业大学1999 五、1(8分)】解答完全同上22)已知两个链表A和B分别表示两个集合,其元素递增排列。

编一函数,求A与B的交集,并存放于A链表中。

【南京航空航天大学2001 六(10分)】pa=la->next;pb=lb->next;pc=la;∥结果表中当前合并结点的前驱的指针。

while(pa&&pb)if(pa->data==pb->data)∥交集并入结果表中。

{pc->next=pa;pc=pa;pa=pa->next;u=pb;pb=pb->next;free(u);}else if(pa->data<pb->data) {u=pa;pa=pa->next;free(u);}else {u=pb; pb=pb->next; free(u);}while(pa){ u=pa; pa=pa->next; free(u);}while(pb) {u=pb; pb=pb->next; free(u);}pc->next=null;free(lb); ∥注:本算法中也可对B表不作释放空间的处理3)设有两个从小到大排序的带头结点的有序链表。

试编写求这两个链表交运算的算法(即L1∩L2)。

要求结果链表仍是从小到大排序,但无重复元素。

【南京航空航天大学(10分)】pa=L1->next;pb=L2->next;∥pa、pb是两链表的工作指针。

pc=L1;∥L1作结果链表的头指针。

while(pa&&pb)if(pa->data<pb->data) {u=pa;pa=pa->next;free(u);}∥删除L1表多余元素else if (pa->data>pb->data) pb=pb->next; ∥pb指针后移else ∥处理交集元素{if(pc==L1) {pc->next=pa;pc=pa;pa=pa->next;} ∥处理第一个相等的元素。

else if(pc->data==pa->data){ u=pa;pa=pa->next;free(u);} ∥重复元素不进入L1表。

else{ pc->next=pa;pc=pa;pa=pa->next;} ∥交集元素并入结果表。

} ∥whilewhile(pa) {u=pa;pa=pa->next;free(u);} ∥删L1表剩余元素pc->next=null; ∥置结果链表尾5)已知递增有序的单链表A,B和C分别存储了一个集合,设计算法实现A:=A∪(B∩C),并使求解结构A仍保持递增。

要求算法的时间复杂度为O(|A|+|B|+|C|)。

其中,|A|为集合A的元素个数。

【合肥工业大学2000 五、1(8分)】LinkedList union(LinkedList A,B,C){pa=A->next;pb=B->next;pc=C->next;∥设置三个工作指针。

pre=A; ∥pre指向结果链表中当前待合并结点的前驱。

if(pa->data<pb->data||pa->data<pc->data)∥A中第一个元素为结果表的第一元素。

{pre->next=pa;pre=pa;pa=pa->next;}else{while(pb&&pc) ∥找B表和C表中第一个公共元素。

if(pb->data<pc->data)pb=pb->next;else if(pb->data>pc->data)pc=pc->next;else break; ∥找到B表和C表的共同元素就退出while循环。

if(pb&&pc)∥因共同元素而非B表或C表空而退出上面while循环。

if(pa->data>pb->data)∥A表当前元素值大于B表和C表的公共元素,先将B表元素链入。

{pre->next=pb;pre=pb;pb=pb->next;pc=pc->next;}∥B,C公共元素为结果表第一元素。

}∥结束了结果表中第一元素的确定while(pa&&pb&&pc){while(pb&&pc)if(pb->data<pc->data) pb=pb->next;else if(pb->data>pc->data) pc=pc->next;else break; ∥B表和C表有公共元素。

相关文档
最新文档