A. 关于有序表合并操作
线性结构合并操作可以分为两类,一类是顺序表(顺序存储),另一类是链表(链式存储),二者在有序表合并时的操作并不完全相同。详细分析如下:
①顺序表:由于顺序表属于顺序存储结构,当需要插入或删除表中元素时需要移动该位置后续的各元素,所以按通常方法,应开辟一个临时的存储表,用于存放合并后的数据。如不开辟一个临时的顺序表用于存储合并后的内容,则需在每次插入时移动后续元素,时间复杂度更大。
基本操作:
i. 开辟临时存储空间,数组长度为A表长度+B表长度;
ii. 取A,B中第一个元素a0,b0进行比较:如a0小于b0,将a0放入临时数组,a0变为a1继续比较;如a0小于等于b0,将b0放入临时数组,b0变为b1继续比较。重复操作。
iii. 当A或B表到达数组尾部时结束循环。
iv. 当A未到数组尾部,则将剩余部分放入临时数组;当B未到数组尾部,则将剩余部分放入临时数组。上述二个操作最后只会执行其一。
v. 将临时数组的值通过循环赋值给A表并返回。
具体的算法略。
②单链表
:单链表的优点在于插入和删除结点时无需移动元素,因此不用开辟额外的临时存储空间用于存放最终结果,可直接修改其中一个链表以得到结果并返回。
基本操作:
i. 声明指针变量pa指向A的头结点,声明pb指向B的首元结点(这里默认链表有头结点Lnode)。
ii. 比较pa->next->data和pb->data,如pa->next->data>pb->data。那么将pb结点放在pa之后,并删除pb所指结点;如
pa->next->data<pb->data,pa = pa->next。