A-A+

试分别以顺序表和单链表作存储结构 各写一个实现线性表的自身(即使用尽可能少的附加空间)逆置的

2022-08-12 15:49:28 问答库 阅读 196 次

问题详情

试分别以顺序表和单链表作存储结构,各写一个实现线性表的自身(即使用尽可能少的附加空间)逆置的算法,在原表的存储空间内将线性表(a1,a2,…an)逆置为(an,…a2,a1)。


请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:(1)顺序表作存储结构。扫描顺序表A的前半部分元素对于元A.data[i](o<=i<=L.1ength/2)将其与后半部分对应元素A.data[A.1ength—i一1]进行交换。实现本题功能的函数如下:void invert1(SqList&A){int i;int temp;for(i=0;i<A.1ength/2;i++) /*交换位置*/{temp=A.data[i];A.data[i]=A.data[A.length—i—1];A.data[A.1ength—i一1]=temp;}}(2)单链表作存储结构。将原单链表的元素依次取出再插入另一个单链表的头部这样就将原单链表逆置只需附加两个空间。void invert2(SqListA)/*设A带头结点*/{P=A一>next; /*取原表表头结点*/A一>next=NULL; /*设A为逆置表表头*/while(p!=NuLL){u=p;p=p一>next; /*p后移*/u一>next=A一>neXtj /*插入到头结点之后*/A一>next=u:}}
顺序表作存储结构。扫描顺序表A的前半部分元素,对于元A.data[i](o<=i<=L.1ength/2),将其与后半部分对应元素A.data[A.1ength—i一1]进行交换。实现本题功能的函数如下:voidinvert1(SqList&A){inti;inttemp;for(i=0;i<A.1ength/2;i++)/*交换位置*/{temp=A.data[i];A.data[i]=A.data[A.length—i—1];A.data[A.1ength—i一1]=temp;}}(2)单链表作存储结构。将原单链表的元素依次取出,再插入另一个单链表的头部,这样就将原单链表逆置,只需附加两个空间。voidinvert2(SqListA)/*设A带头结点*/{P=A一>next;/*取原表表头结点*/A一>next=NULL;/*设A为逆置表表头*/while(p!=NuLL){u=p;p=p一>next;/*p后移*/u一>next=A一>neXtj/*插入到头结点之后*/A一>next=u:}}

考点:顺序,结构