知识大全 数据结构考研分类复习真题 第二章 答案[57]
Posted 结点
篇首语:最好的治疗是在温暖、干净、干燥的环境下养猪。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第二章 答案[57]相关的知识,希望对你有一定的参考价值。
.[题目分析] 留下三个链表中公共数据 首先查找两表A和B中公共数据 再去C中找有无该数据 要消除重复元素 应记住前驱 要求时间复杂度O(m+n+p) 在查找每个链表时 指针不能回溯
LinkedList Common(LinkedList A B C)∥A B和C是三个带头结点且结点元素值非递减排列的有序表 本算法使A表仅留下三个表均包含的结点 且结点值不重复 释放所有结点 pa=A >next;pb=B >next;pc=C >next;∥pa pb和pc分别是A B和C三个表的工作指针 pre=A;∥pre是A表中当前结点的前驱结点的指针 while(pa && pb && pc)∥当A B和C表均不空时 查找三表共同元素 while(pa && pb) if(pa >data<pb >data)u=pa;pa=pa >next;free(u);∥结点元素值小时 后移指针 else if(pa >data> pb >data)pb=pb >next; else if (pa && pb) ∥处理A和B表元素值相等的结点 while(pc && pc >data<pa >data)pc=pc >next; if(pc) if(pc >data>pa >data)∥pc当前结点值与pa当前结点值不等 pa后移指针 u=pa;pa=pa >next;free(u); else∥pc pa和pb对应结点元素值相等 if(pre==A) pre >next=pa;pre=pa;pa=pa >next∥结果表中第一个结点 else if(pre >data==pa >data)∥(处理)重复结点不链入A表 u=pa;pa=pa >next;free(u); else pre >next=pa;pre=pa;pa=pa >next;∥将新结点链入A表 pb=pb >next;pc=pc >next;∥链表的工作指针后移 ∥else pc pa和pb对应结点元素值相等 if(pa==null)pre >next=null;∥原A表已到尾 置新A表表尾 else∥处理原A表未到尾而B或C到尾的情况 pre >next=null;∥置A表表尾标记 while(pa!=null)∥删除原A表剩余元素 u=pa;pa=pa >next;free(u);
[算法讨论] 算法中A表 B表和C表均从头到尾(严格说B C中最多一个到尾)遍历一遍 算法时间复杂度符合O(m+n+p) 算法主要由while(pa && pb && pc)控制 三表有一个到尾则结束循环 算法中查到A表与B表和C表的公共元素后 又分三种情况处理 一是三表中第一个公共元素值相等的结点;第二种情况是 尽管不是第一结点 但与前驱结点元素值相同 不能成为结果表中的结点;第三种情况是新结点与前驱结点元素值不同 应链入结果表中 前驱指针也移至当前结点 以便与以后元素值相同的公共结点进行比较 算法最后要给新A表置结尾标记 同时若原A表没到尾 还应释放剩余结点所占的存储空间
cha138/Article/program/sjjg/201311/23317相关参考
.()la () &
.[题目分析]本题所用数据结构是静态双向链表其结构定义为 typedef struct node char data[maxsize];∥用户姓名maxsize是
()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是
.[题目分析]顺序存储结构的线性表的逆置只需一个变量辅助空间算法核心是选择循环控制变量的初值和终值 void SeqInvert(ElemTypea[]intn)∥a是具有n个元素用一
.[题目分析]首先在双向链表中查找数据值为x的结点查到后将结点从链表上摘下然后再顺结点的前驱链查找该结点的位置 DLinkList locate(DLinkListLElemTypex