1、2 8已知P结点是双向链表的中间结点 试从下列提供的答案中选择合适的语句序列 a 在P结点后插入S结点的语句序列是 b 在P结点前插入S结点的语句序列是 c 删除P结点的直接后继结点的语句序列是 d 删除P结点的直接前驱结点的语句序列是 e 删除P结点的语句序列是 1 P next P next next 10 P prior next P 2 P prior P prior prior 11 P next prior P 3 P next S 12 P next prior S 4 P prior S 13 P prior next S 5 S next P 14 P next prior
2、P prior 6 S prior P 15 Q P next 7 S next P next 16 Q P prior 8 S prior P prior 17 free P 9 P prior next p next 18 free Q 76123 58134 1511118 1621018 91417 2 10指出以下算法中的错误和低效 即费时 之处 并将它改写为一个既正确又高效的算法 StatusDeleteK SqList DeleteK 参数不合法的判别条件不完整 合法的入口参数条件为 0 i a length 0 k a length i 第二个For语句中 元素前移的次序错误
3、低效之处是每次删除一个元素的策略 StatusDeleteK SqList DeleteK 计算有多少元素需要前移 2 21试写一算法 实现顺序表的就地逆置 即利用原表的存储空间将线性表 a1 a2 an 逆置为 an an 1 a1 voidreverse SqList reverse 2 22试写一算法 对单链表实现就地逆置 以单链表作存储结构进行就地逆置的正确做法应该是 将原链表中的头结点和第一个元素结点断开 令其指针域为空 先构成一个新的空表将原链表中各结点 从第一个结点起 依次插入这个新表的头部 即令每个插入的结点成为新的第一个元素结点 本算法的思想是 逐个地把L的当前元素q插入新的
4、链表头部 p为新表表头 voidLinkList reverse Linklist 把L的元素逐个插入新表表头 LinkList reverse 2 34假设在算法描述语言中引入指针的二元运算 异或 用表示 若a和b为指针 则的运算结果仍为原指针类型 且则可利用一个指针域来实现双向链表L 链表L中的每个结点只含两个域 data域和LRPtr域 其中LRPtr域存放在该结点的左邻与右邻结点指针 不存在是为NULL 的异或 若设指针L Left指向链表中的最左结点 L Right指向链表中的最右结点 则可实现从左向右或从右向左遍历此双向链表的操作 试写一算法按任一方向依次输出链表中各元素的值 vo
5、idPrint XorLinkedList XorLinkedListL 从左向右输出异或链表的元素值 p L left pre NULL while p printf d p data q XorP p LRPtr pre pre p p q 任何一个结点的LRPtr域值与其左结点指针进行异或运算即得到其右结点指针 Print XorLinkedList 2 35采用2 34题所述的存储结构 写出在第i个结点之前插入一个结点的算法 StatusInsert XorLinkedList XorLinkedList j 1 当插入点在中间的情况while j i Insert XorLinkedList