知识大全 数据结构考研分类复习真题 第二章 答案[21]
Posted 结点
篇首语:研卷知古今;藏书教子孙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第二章 答案[21]相关的知识,希望对你有一定的参考价值。
.[题目分析]本题实质上是一个排序问题 要求 不得使用除该链表结点以外的任何链结点空间 链表上的排序采用直接插入排序比较方便 即首先假定第一个结点有序 然后 从第二个结点开始 依次插入到前面有序链表中 最终达到整个链表有序
LinkedList LinkListSort(LinkedList list)∥list是不带头结点的线性链表 链表结点构造为data和link两个域 data是数据域 link是指针域 本算法将该链表按结点数据域的值的大小 从小到大重新链接 p=list >link;∥p是工作指针 指向待排序的当前元素 list >link=null;∥假定第一个元素有序 即链表中现只有一个结点 while(p!=null) r=p >link;∥r是p的后继 q=list; if(q >data>p >data)∥处理待排序结点p比第一个元素结点小的情况 p >link=list; list=p;∥链表指针指向最小元素 else∥查找元素值最小的结点 while(q >link!=null&&q >link >data<p >data)q=q >link; p >link=q >link;∥将当前排序结点链入有序链表中 q >link=p; p=r;∥p指向下个待排序结点
[算法讨论]算法时间复杂度的分析与用顺序存储结构时的情况相同 但顺序存储结构将第i(i> )个元素插入到前面第 至第i 个元素的有序表时 是将第i个元素先与第i 个元素比较 而在链表最佳情况均是和第一元素比较 两种存储结构下最佳和最差情况的比较次数相同 在链表情况下 不移动元素 而是修改结点指针
另一说明是 本题中线性链表list不带头结点 而且要求 不得使用除该链表以外的任何链结点空间 所以处理复杂 需要考虑当前结点元素值比有序链表第一结点的元素值还小的情况 这时要修改链表指针list 如果list是头结点的指针 则相应处理要简单些 其算法片段如下
p=list >link;∥p指向第一元素结点 list >link=null;∥有序链表初始化为空 while(p!=null) r=p >link;∥保存后继 q=list; while(q >link!=null && q >link >data<p >data)q=q >link; p >link=q >link; q >link=p; q=r;
cha138/Article/program/sjjg/201311/23351相关参考
第章 线性表答案 一.选择题 ABCADDDCBBCIIEBCBCCCAAADCBDCBBAD 二.判断题 ×√√××××××××××√×√ 部分答案解释如下 头结点并不仅起
知识大全 数据结构考研分类复习真题 第六章 答案 (五)[21]
TYPEbitreptr=^binode; binode=RECORDdata:ElemType;lchildrchlid:bitreptrEND; PROCPreOrder(bt:bitre
.()la () &
.[题目分析]本题所用数据结构是静态双向链表其结构定义为 typedef struct node char data[maxsize];∥用户姓名maxsize是
.() ()ASLsucc=/ .() 关键字和各发生一次碰撞关键字和各发生两次碰撞其余关键字无碰撞 ()cha138/Article/program/sjjg/201311/2
知识大全 数据结构考研分类复习真题 第六章 答案 (四)[21]
() ()前序序列ABCEDFHGIJ 中序序列ECBHFDJIGA 后序序列ECHFJI
()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));