【数据结构】从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,如果s或t 不合理或者顺序表为空则显示出错信息并退出运行。(直接运行)

第一步 初始化(结构体 基本函数)

#include <iostream>
using namespace std;
#define Max 10
typedef  int Elemtype;

typedef struct {
    Elemtype data[Max];
    int length;
}Sqlist;

void swap(Elemtype &a,Elemtype &b){
    Elemtype c;
    c = a;
    a = b;
    b = c;
}

void Random(int *a,int n,int l,int r)//生成范围在l~r的随机数
{
    srand(time(0));  //设置时间种子
    for(int i=0;i<n;i++){
        a[i]=rand()%(r-l+1)+l;//生成区间r~l的随机数
    }
}

int findMinIndex(Sqlist A,int start,int end){
    int Minindex = start;
    for(int j=start+1;j<end;++j){
        if(A.data[j]<A.data[Minindex]){
            Minindex = j;
        }
    }
    return Minindex;
}

void selectSort(Sqlist &A){
    for(int i=0;i<A.length-1;++i){
        int minIndex = findMinIndex(A,i,A.length);
        if(i!=minIndex){
            swap(A.data[i],A.data[minIndex]);
        }
    }
}

第二步 编写函数

bool finds2t(Sqlist &L,Elemtype s,Elemtype t,int &start,int &end){
    if(s>=t||L.length == 0){
        return false;
    }
    int IndexS;
    for(IndexS = 0;IndexS<L.length&&L.data[IndexS]<s;IndexS++);

    if(IndexS>=L.length){
        return false;
    }
    int IndexT;
    for(IndexT = IndexS; IndexT<L.length&&L.data[IndexT]<=t;IndexT++);
    start = IndexS;
    end = IndexT - 1;
    cout<<"在["<<s<<","<<t<<"]之内的数组下标为["<<start<<","<<end<<"]";
    return true;
}
//删除位序在 i-j 的元素
bool deli2j(Sqlist &L,int i,int j){
    if(L.length == 0){
        return false;
    }
    i--;
    j--;

    int IndexI;
    int IndexJ;
    for(IndexI = i,IndexJ = j+1;IndexJ<L.length;IndexI++,IndexJ++){
        L.data[IndexI] = L.data[IndexJ];
    }
    L.length = L.length-(j-i+1);
    cout<<endl;
    cout<<"删除了位序为"<<i+1<<"到"<<j+1<<"位置上的元素之后的数组为:";
    for (int k = 0; k < L.length; ++k) {
        cout<<L.data[k]<<" ";
    }

}
//将上两个函数组合就达到解题目的
bool Dels2t(Sqlist &L,Elemtype s,Elemtype t){
    if(s>=t||L.length == 0){
        return false;
    }
    int start;
    int end;
    finds2t(L,s,t,start,end);
    deli2j(L,start+1,end+1);

}

int main(){
    Sqlist L;
    L.length = 10;
    int start;
    int end;
    Random(L.data,10,0,10);
    selectSort(L);
    cout<<"数组为:";
    for (int i = 0; i < L.length; ++i) {
        cout<<L.data[i]<<" ";

    }
    //这是分别调用两个函数
    //finds2t(L,4,8,start,end);
    //deli2j(L,start+1,end+1);
    
    cout<<endl;
    cout<<"直接调用一个函数来实现:"<<endl;
    Dels2t(L,4,8);

}

第三步 运行调试

image-20210910160320010

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值