5-顺序表查找及插入问题

给你一个顺序表a[],请找到

1-0 第一个x出现的位置,如果不存在,输出-1

1-1 前两个x出现的位置,如果只存在一个x,输出他的位置,如果一个都不存在,输出-1

1-2 查询最小/大元素所在的位置,如果多个最小/大值,输出第一个

1-3 查询次大/小值所在的位置。

2-0向顺序表a[]的第i个(下标从0开始)位置前插入一个元素x。如果插入位置太小输出-1,太大输出1,合法输出0并完成插入


代码1:(自己写的):

#include <stdio.h>
const int maxn = 100;

int finds(int a[],int n,int x)
{
    int couter=0;
    for(int i=1;i<=n;i++)
    {
        if((a[i]==x))
        {
            return i;
        }
    }
    return -1;
}

void finds1(int a[],int n,int x)
{
    int couter=0;
    for(int i=1;i<=n;i++)
    {
        if((a[i]==x)&&(couter<2))
        {
            printf("%d ",i);
            couter++;
        }
    }
    if(!couter)
    printf("-1");
}

int finds2(int a[],int n)
{
    int site=1;
    a[0]=a[1];      //设a[0]为最大元素,每个元素跟a[0]进行比较
    for(int i=2;i<=n;i++)
    {
        if(a[0]<a[i])
        {
            a[0]=a[i];
            site=i;
        }
    }
    return site;
}

//max1和max2的值需要先做一个比较,以下代码未比较,待改正
/*int finds3(int a[],int n)
{
    int b[3];
    int max1=1,max2=2;
    b[1]=a[1];
    for(int i=2;i<=n;i++)
    {
        if(a[i]>b[1])
        {
            b[2]=b[1];
            max2=max1;
            b[1]=a[i];
            max1=i;
        }
        else if(a[i]<b[1])
        {
            if(a[i]>b[2])
            {
                b[2]=a[i];
                max2=i;
            }
        }
    }
    return max2;
}
*/

int main()
{
    int a[maxn];
    int n,x;
    scanf("%d %d",&n,&x);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }

//    int ret=finds(a,n,x);
//    printf("%d\n",ret);

//    finds1(a,n,x);

//    int maxs = finds2(a,n);
//    printf("%d",maxs);

    printf("%d",finds3(a,n));
    return 0;
}

代码2:(西交wrong):

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>

using namespace std;
const int maxn = 100000;
typedef pair<int,int> P;
int findx(int a[],int n,int x)
{
    for(int i=1;i<=n;i++)
        if(a[i]==x) return i;
    return -1;
}
void findxy(int a[],int n,int x,int &x1,int &x2)
{
    bool cot=0;//当前出现了0个x
    for(int i=1;i<=n;i++)
        if(a[i]==x)
            if(cot==0) {x1=i;cot=1;}
            else
                if(cot==1) {x2=i;return ;}
}
int findmax(int a[],int n)
{
    int maxpos=1,maxnum=a[1];
    for(int i=2;i<=n;i++)
        if(a[i]>maxnum) {maxnum=a[i];maxpos=i;}
    return maxpos;
}
int findmax2(int a[],int n)
{
    //n
    int max1=max(a[1],a[2]),max2=min(a[1],a[2]),pos1,pos2;
    if(a[1]>a[2]) {pos1=1;pos2=2;}
    else {pos1=2;pos2=1;}

    for(int i=3;i<=n;i++)
    {
        if(a[i]>max1) {max2=max1;pos2=pos1;max1=a[i];pos1=i;}
        else
            if(a[i]==max1) continue;
            else {
                if(a[i]>max2){
                    pos2=i;
                    max2=a[i];
                }
            }
    }
    return pos2;
}
int insertList(int a[],int th,int n,int x)
{
    if(th<1) return -1;
    if(th>n) return 1;
    for(int i=n;i>=th;i--)
        a[i+1]=a[i];
    a[th]=x;
    return 0;
}
int main()
{
    int a[maxn];
    //1.0 第一个x出现的位置,如果不存在,输出-1
    int n,x,y;
    cin>>n>>x>>y;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    //int res=findx(a,n,x);
    //printf("%d\n",res);
    /*
    int x1=-1,x2=-1;
    findxy(a,n,x,x1,x2);
    if(x1==-1) printf("-1\n");
    else
        if(x2!=-1) printf("%d %d\n",x1,x2);
        else printf("%d\n",x1);
   */
    //printf("%d\n",findmax2(a,n));
    cout<<insertList(a,x+1,n,y)<<endl;
    for(int i=1;i<=n+1;i++)
        cout<<a[i]<<" ";
    cout<<endl;
   return 0;
}

(感谢西交wrong学长提供以上题目练习)

猜你喜欢

转载自blog.csdn.net/outer_star/article/details/81415414