2-11 从顺序表 list 中删除第 i 个元素
分数 8
作者 陈越
单位 浙江大学
请编写程序,将 n 个整数存入顺序表,对任一指定的第 i 个位置,将这个位置上的元素从顺序表中删除。注意:i 代表位序,从 1 开始,不是数组下标。
输入格式:
输入首先在第一行给出正整数 n(≤104);随后一行给出 n 个 int 范围内的整数,数字间以空格分隔;最后一行给出删除位序 i,为 int 范围内的整数。
输出格式:
如果删除的位置不合法,则不能删除,在一行中输出句子 错误:不存在这个元素。。无论是否删除成功,都在一行中顺序输出表中的元素,每个元素后面跟一个空格。
输入样例 1:
输出样例 1:
输入样例 2:
输出样例 2:
答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include <iostream> using namespace std;
typedef struct { int *data; int length; } sqList;
void initList(sqList &L, int n) { L.data = new int[n]; L.length = 0; }
bool deleteElem(sqList &L, int i) { if (i < 1 || i > L.length) { return false; } for (int j = i; j < L.length; j++) { L.data[j-1] =L.data[j]; } L.length--; return true; }
int main() { int n, i; cin >> n; sqList L; initList(L, n); for (int j = 0; j < n; ++j) { cin >> L.data[j]; L.length++; }
cin >> i; bool isDelete = deleteElem(L, i); if (!isDelete) { cout << "错误:不存在这个元素。" << endl; } for (int j = 0; j < L.length; ++j) { cout << L.data[j] << " "; } }
|