- 主要内容
1.编写一个算法实现n个整数类型数据的顺序表的逆置。如:原顺序表为1,2,3,4,逆置后为4,3,2,1。
2.编写一个算法实现找出n个整数类型数据的顺序表中的最大数和最小数,然后将最大数放到最小数后面。如:原顺序表为:12,6,4,20,14,7,9,36,10,15,调整后顺序表为:12,6,4,36,20,14,7,9, 10,15。
- 代码模拟实现
#include<iostream>
using namespace std;
#define Maxsize 100
typedef struct
{
int elem[Maxsize];
int length;
}SqList;
int Max;//全局变量,保存最大值
void create(SqList &l)//创建长度为n的顺序表
{ int n;
cout<<"请输入数据的个数"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>l.elem[i];
l.length++;
}
}
void invert(SqList &l)//倒置
{ int t;
int m=l.length/2;
for(int i=0;i<m;i++)
{
t=l.elem[l.length-1-i];
l.elem[l.length-1-i]=l.elem[i];
l.elem[i]=t;
}
for(int j=0;j<l.length;j++)
{
cout<<l.elem[j]<<" ";
}
cout<<endl;
}
int min(SqList &l)//找最小值,返回最小值下标
{ int t=l.elem[0];
int x=0;//记录最小值下标
for(int i=0;i<l.length;i++)
{
if(t>l.elem[i])
{
t=l.elem[i];
x=i;
}
}
return x;
}
int max(SqList &l)//找最大值,返回最大值下标
{
Max=l.elem[0];
int y=0;//记录最大值下标
for(int i=0;i<l.length;i++)
{
if(Max<l.elem[i])
{
Max=l.elem[i];
y=i;
}
}
return y;
}
void delet(SqList &l,int t)//删除最大值
{
int m=l.length-t+1;//移动次数
for(int i=0;i<m;i++)
{
l.elem[t+i]=l.elem[t+i+1];
}
}
void insert(SqList &l,int t)//把最大值插入到最小值后面
{
int m=l.length-t+1;//移动次数
for(int i=m;i>0;i--)
{
l.elem[t+i+1]=l.elem[t+i];
}
l.elem[t+1]=Max;
}
void print(const SqList &l)//打印顺序表
{
for(int i=0;i<l.length;i++)
{
cout<<l.elem[i]<<" ";
}
cout<<endl;
}
int main()
{
SqList l;
l.length=0;
create(l);//创建顺序表
delet(l,max(l));//删除最大值
insert(l,min(l)); //把最大值插入到最小值后面
print(l);
invert(l);//倒置
return 0;
}
- 测试运行结果