通过建立线性表,对其使用静态分配赋值后,讨论如何对线性表中的两个元素如何交换位置,其结果是显然的。
void swap (ElemType* a, ElemType* b)
{
ElemType c = *a;
*a = *b;
*b = c;
}
C语言函数不会对数值进行更改,故使用指针,指针指向变量的存储单元,通过直接更改存储单元内的数据来达到数据交换的目的。
转置的方法是将第一个与最后一个,第二个与倒数第二个以此类推交换位置直到中间,故for循环仅执行L->length/2次,如3个长度的线性表仅需换第一个和最后一个位置就完成了转置,具体如下。
1 | 2 | 3 |
3 | 2 | 1 |
完整代码如下,可直接复制到visio中运行。
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef int ElemType;
typedef struct
{
ElemType value[MaxSize];
int length;
}SqlList;
void swap (ElemType* a, ElemType* b)
{
ElemType c = *a;
*a = *b;
*b = c;
}
void reverse(SqlList *L)
{
for (int i = 0;i < L->length / 2;i++)
{
swap(&L->value[i],&L->value[L->length-1-i]);
}
}
int main(void)
{
SqlList L;
L.length = 10;
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i=0;i<L.length;i++)
{
L.value[i] = a[i];
}
reverse(&L);
for (int i = 0;i < L.length;i++)
{
printf("%d",L.value[i]);
}
}