知识大全 数据结构考研分类复习真题 第二章 答案[18]
Posted 结点
篇首语:进学致和,行方思远。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第二章 答案[18]相关的知识,希望对你有一定的参考价值。
[算法讨论]本算法先找结果链表的第一个元素 这是因为题目要求结果表要递增有序(即删除重复元素) 这就要求当前待合并到结果表的元素要与其前驱比较 由于初始pre=A(头结点的头指针) 这时的data域无意义 不能与后继比较元素大小 因此就需要确定第一个元素 当然 不要这样作 而直接进入下面循环也可以 但在链入结点时 必须先判断pre是否等于A 这占用了过多的时间 因此先将第一结点链入是可取的
算法中的第二个问题是要求时间复杂度为O(|A|+|B|+|C|) 这就要求各个表的工作指针只能后移(即不能每次都从头指针开始查找) 本算法满足这一要求
最后一个问题是 当B C有一表为空(即B和C已无公共元素时) 要将A的剩余部分链入结果表
.[题目分析]循环单链表L 和L 数据结点个数分别为m和n 将二者合成一个循环单链表时 需要将一个循环链表的结点(从第一元素结点到最后一个结点)插入到另一循环链表的第一元素结点前即可 题目要求 用最快速度将两表合并 因此应找结点个数少的链表查其尾结点
LinkedList Union(LinkedList L L ;int m n)∥L 和L 分别是两循环单链表的头结点的指针 m和n分别是L 和L 的长度 本算法用最快速度将L 和L 合并成一个循环单链表 if(m< ||n< ) printf( 表长输入错误\\n );exit( ); if(m<n)∥若m<n 则查L 循环单链表的最后一个结点 if(m== )return(L );∥L 为空表 elsep=L ; while(p >next!=L ) p=p >next;∥查最后一个元素结点 p >next=L >next;∥将L 循环单链表的元素结点插入到L 的第一元素结点前 L >next=L >next; free(L );∥释放无用头结点 ∥处理完m<n情况 else∥ 下面处理L 长度小于等于L 的情况 if(n== )return(L );∥L 为空表 elsep=L ; while(p >next!=L ) p=p >next;∥查最后元素结点 p >next=L >next;∥将L 的元素结点插入到L 循环单链表的第一元素结点前 L >next=L >next; free(L );∥释放无用头结点 ∥算法结束
cha138/Article/program/sjjg/201311/23353相关参考
第章 线性表答案 一.选择题 ABCADDDCBBCIIEBCBCCCAAADCBDCBBAD 二.判断题 ×√√××××××××××√×√ 部分答案解释如下 头结点并不仅起
.()la () &
.[题目分析]本题所用数据结构是静态双向链表其结构定义为 typedef struct node char data[maxsize];∥用户姓名maxsize是
. .cha138/Article/program/sjjg/201311/22821
()voidCreatOut()∥建立有n个单词的单向链表重复单词只在链表中保留一个最后输出频度最高的k个单词 LinkedListla; la=(LinkedList)malloc(size
.[题目分析]在递增有序的线性表中删除数值相同的元素要知道被删除元素结点的前驱结点 LinkedListDelSame(LinkedListla) ∥la是递增有序的单链表本算法去掉数值相同的
()要求编程实现带头结点的单链表的逆置首先建立一单链表然后逆置 typedef struct node int data;∥假定结点数据域为整型 struct&
()本题与上面两题类似要求结果指针为lc其核心语句段如下 pa=la>next;pb=hb>next; lc=(LinkedList)malloc(sizeof(LNode));
.设 q:=p^llink; 则 q^rlink:=p^rlink; p^rlink^llink:=q; p^llink:=q^llink; q^lli
.[题目分析] 知道双向循环链表中的一个结点与前驱交换涉及到四个结点(p结点前驱结点前驱的前驱结点后继结点)六条链 void Exchange(LinkedListp)∥p是