PTA刷题
xcu-sjjg-C-List-3 最大元素后插入
题目分析本题难度不大,较为简单。
主要步骤有
①寻找最大值的位置
②插入
(我当时把j循环赋值了,就一直报错。)
编写算法:有一个非空整数顺序表L,其中元素值可能重复出现,设计一个算法,在最后一个最大值元素之后插入一个值为x的元素。
函数接口定义:
方法接口:
void InsAfterOfMax (SqList &L ,int x)
参数 L 表示线性表 参数 x 表示要插入的元素。
裁判测试程序样例:
#include <stdio.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{ ElemType data[MaxSize];
int length;
} SqList;
void CreateList(SqList &L,int n);//输入n个元素创建线性表,代码省略
void DispList(SqList L);//输出 线性表,代码省略
/* 请在这里填写答案 */
int main( ){
SqList L ;
int n,x;
scanf("%d",&n);
CreateList(L,n);
scanf("%d",&x);
InsAfterOfMax(L,x);
DispList(L);
}
输入样例:
输入两行,第一行由n+1个整数组成,第1个数表示线性表的元素个数,紧接着n个整数 表示 线性表元素,第二行有1个整数,表示要插入的元素。例如:
5 1 3 7 5 2 4
输出样例:
输出结果只有一行,是插入后的线性表的所有元素。
1 3 7 4 5 2
输入样例:
5 1 3 7 7 5 4
输出样例:
1 3 7 7 4 5
答案
void InsAfterOfMax (SqList &L ,int x)
{
int i;
int j,k;
int p;
j=0;//注意别把j除服赋值了;
for(i=0;i<=L.length;i++)//寻找最大值的位置
{
if(L.data[i]>=L.data[j])
{
j=i;
}
}
for(p=L.length-1;p>j;p--)//移位
{
L.data[p+1]=L.data[p];
}
L.data[j+1]=x;//插入
L.length++;
}