数据结构的问题

请解答以下算法(用c语言):
(1)将线性表(a1,a2…an)就地逆置为(an,…a2,a1)。
(2)对单链表实现就地逆置。
注意要用c语言,不要用c++。
最新回答
丑人多作怪

2024-10-16 07:56:19

读读下面的程序就知道了

设有一个线性表 (e0, e1, …, en-2, en-1) 存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为 (en-1, en-2, …, e1, e0)。
【解答】
template<class Type> void inverse ( Type A[ ], int n ) {
Type tmp;
for ( int i = 0; i <= ( n-1 ) / 2; i++ ) {
tmp = A[i]; A[i] = A[n-i-1]; A[n-i-1] = tmp;
}
}

设有一个表头指针为h的单链表。试设计一个算法,通过遍历一趟链表,将链表中所有结点的链接方向逆转,如下图所示。要求逆转结果链表的表头指针h指向原链表的最后一个结点。 【解答1】
template<class Type> void List<Type> :: Inverse ( ) {
if ( first == NULL ) return;
ListNode<Type> *p = first→link;, *pr = NULL;
while ( p != NULL ) {
first→link = pr; //逆转first指针
pr = first; first = p; p = p→link; //指针前移
}
}
【解答2】
template<class Type> void List<Type> :: Inverse ( ) {
ListNode<Type> *p, *head = new ListNode<Type> ( );
while ( first != NULL ) {
p = first; first = first→link; //摘下first链头结点
p→link = head→link; head→link = p; //插入head链前端
}
first = head→link; delete head; //重置first
}