【问题描述】设计一个程序,从一给定的顺序表L中删除下标从m至n(m<=n,包括m、n)的所有元素,假定m、n 都是合法的。 Please design a program to delete all elements whose subscripts are from m to n (m < = n, including m and n) according to the created table L, assuming that m and n are legal. 【输入形式】多组数据,每组数据四行。第一行为一个整数n,代表顺序表中有n个元素。第二行为顺序表中的n 个 元素(元素之间要用空格分隔)。第三行为下标m的值。第四行为下标n的值。 【输出形式】每组数据输出一行,即删除下标为m-n的元素后的顺序表。
时间: 2023-04-05 17:01:13 浏览: 70
以下是程序的实现:
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void deleteElements(SqList *L, int m, int n) {
int i, j;
for (i = m, j = n + 1; j <= L->length; i++, j++) {
L->data[i] = L->data[j];
}
L->length -= (n - m + 1);
}
int main() {
int n, m, i;
SqList L;
while (scanf("%d", &n) != EOF) {
L.length = n;
for (i = 0; i < n; i++) {
scanf("%d", &L.data[i]);
}
scanf("%d%d", &m, &n);
deleteElements(&L, m, n);
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
return 0;
}
相关问题
已知在一维数组a[m+n]中一次存放两个线性表a和b编写一个函数,将数组中两个顺序表
假设给定的一维数组 a[m+n] 存放了两个顺序表 a 和 b,我们可以使用如下的方法将这两个顺序表分开:
1. 定义一个新的数组 c[m+n] 来存放结果。
2. 将数组 a 中的元素逐个复制到数组 c 中,即将 a 的元素从下标 0 到 m-1 复制到 c 的下标 0 到 m-1。
3. 将数组 b 中的元素逐个复制到数组 c 中,即将 b 的元素从下标 0 到 n-1 复制到 c 的下标 m 到 m+n-1。
4. 返回数组 c,即为将数组 a 和 b 分开的结果。
下面是一个示例代码的实现:
```python
def separate_lists(a, b, m, n):
c = [0] * (m + n)
for i in range(m):
c[i] = a[i]
for i in range(n):
c[m+i] = b[i]
return c
```
这样,通过调用 `separate_lists(a, b, m, n)` 函数,就可以将数组 a 和 b 分开存放,返回值即为结果数组 c。
设计一个算法,输出在顺序表中采用顺序方法找关键字5的过程
假设顺序表存储在一个数组中,算法如下:
1. 从数组下标为0的元素开始,依次遍历数组。
2. 对于每个元素,判断是否等于关键字5。
3. 如果相等,则返回该元素的下标,表示找到了关键字5。
4. 如果遍历完整个数组仍未找到关键字5,则返回-1,表示未找到。
下面是伪代码实现:
```
function search(arr, key):
for i from 0 to length(arr)-1:
if arr[i] == key:
return i
return -1
```
例如,给定以下顺序表:
```
[1, 2, 3, 4, 5, 6, 7, 8, 9]
```
调用 `search(arr, 5)` 将返回 4,表示找到了关键字5。如果调用 `search(arr, 10)` 将返回 -1,表示未找到关键字10。