算法功能:仅使用一个临时变量tmp逆置整个线性表。
主要函数及功能介绍:
①SeqList reverse(SeqList *L) :顺序表的就地逆置
使用临时变量tmp逆置线性表,思想是将首元素a的值赋给tmp,将尾元素b的值赋给a,将tmp的值赋给b,就完成了一次交换,以此类推。
②void ListTraverse(SeqList L):遍历顺序表
使用for循环遍历线性表,依次输出所有元素。
③SeqList create(int n) :建立顺序表
由于题目要求函数传参数n进入,所以我们在这个函数中已经有了线性表的长度,在此函数中我们只需要输入要建立表中的元素。
代码:
#include<iostream>
using namespace std;
#define MAXSIZE 20
typedef struct //定义结构体
{
int a[MAXSIZE]; //顺序表中的元素
int n; //顺序表的长度
}SeqList;
SeqList L;
SeqList reverse(SeqList &L) //顺序表的就地逆置
{
int tmp;
for(int i = 0,j = L.n-1;i < j; i ++, j --)
{
tmp = L.a[i];
L.a[i] = L.a[j];
L.a[j] = tmp;
}
cout << "元素逆置成功!" << endl;
}
void ListTraverse(SeqList L) //遍历顺序表
{
for(int i = 0;i < L.n; i++)
cout << L.a[i] << " ";
cout << endl;
}
SeqList create(int n) //建立顺序表
{
L.n = n;
cout << "请输入顺序表中的元素:" << endl;
for(int i = 0; i < L.n; i++)
cin >> L.a[i];
return L;
}
int main()
{
cout << "请输入顺序表中的元素个数:" << endl;
int n;
cin>>n;
create(n); //建立顺序表 L
ListTraverse(L); //遍历顺序表 L
reverse(L); //逆置顺序表 L
ListTraverse(L); //遍历顺序表 L
}
需要注意L->a和L.a的区别,L->a传入的是指针,L.a传入的是数。在就地逆置的部分,L传参时需要变成*L。