题目来源:PIPIOJ 1214 逆置顺序表
【问题描述】
从顺序表L中删除具有最小值的元素(假设唯一)并友函数返回被删元素的值。空出的元素由最后一个元素填补。
【输入输出】
1.输入:
输入包含一个整数n代表顺序表L长度。
接下来包含n个整数,代表顺序表L中的元素。
2.输出:
若顺序表为空,输出 "error".
若不为空,输出最小元素的值并输出删除最小值之后的顺序表。
【样例】
样例输入:
3
1 2 3
样例输出:
1
3 2
【算法思路】
此算法思路来源于率辉老师主编的2022版的《高分笔记》一书。可以设置两个整型变量i和j,i指向第一个元素,j指向最后一个元素,边交换i和j所指的元素,边让i和j相向而行,直到相遇。
【算法描述】
#include<iostream>
using namespace std;
/*定义顺序表*/
#define maxSize 100
typedef struct SqList
{
int data[maxSize];
int len = 0; //顺序表当前的长度
}SqList;
/*逆置整个顺序表*/
void Reverse(SqList &L, int left, int right) //left和right是数组两端元素的下标
{
int temp;
left = 0;
right = L.len - 1;
for (int i=left, j=right; i<j; ++i, --j) //i指向第一个元素,j指向最后一个元素
{
temp = L.data[i];
L.data[i] = L.data[j];
L.data[j] = temp;
}
}
int main()
{
SqList L; //声明一个线性表L
int n; //顺序表的长度
cin >> n;
/*输入顺序表各个元素 */
for (int i=0; i<n; ++i)
{
cin >> L.data[i];
L.len++;
}
Reverse(L, 0, L.len-1);
for(int i=0; i<L.len; ++i)
cout << L.data[i] << " ";
return 0;
}