题目:从顺序表中删除其值其在给定值s与t之间(要求s <= t)的所有元素,如果s或t不合理或顺序表为空则显示出错信息并退出运行。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 40001
typedef int DataType;
typedef struct
{
DataType a[N];
DataType lenth;
}Linelink;
void Init_link(Linelink& L)
{
L.lenth = 0;
}
void Create_link(Linelink& L)
{
cin >> L.lenth;
cout << "请输入" << L.lenth << "个数据:";
for (int i = 0; i < L.lenth; i++) cin >> L.a[i];
}
void Clear_element(Linelink& L)
{
int s, t;
cout << "请输入要删除的数据的闭区间:";
do{
// 让第一次输入不输出此段话
static int temp = 0;
if (temp) cout << "请重新输入闭区间:";
temp++;
// 输入闭区间
cin >> s >> t;
}while(s > t || t > L.lenth || s < 0); // 判断条件为输入错误范围,重新输入
// 将数据目标删除
for (int i = t; i < L.lenth; i++) L.a[s + i - t] = L.a[i];
L.lenth -= t + 1 - s;
}
void Print_link(Linelink& L)
{
cout << "最终的顺序表为:";
for (int i = 0; i < L.lenth; i++) cout << L.a[i] << ' ';
}
int main(){
Linelink L;
// 初始化顺序表
Init_link(L);
// 创建顺序表
Create_link(L);
// 处理数据并输出
if (L.lenth) {Clear_element(L); Print_link(L);}
else cout << "顺序表中为空。";
return 0;
}