用c语言写已知一个顺序表A,其中存放的数据元素皆为整型,输入时以-1表示顺序表A输入完毕。找出表A中从表头开始第一个最小值并输出最小值及其位置(若表A为空表,则状态返回ERROR,不为空表则状态返回OK);删除该最小值后,输出顺序表A;删除表A中所有的偶数(如没有偶数则不删除),然后在表尾插入删除的偶数的数量(数量为0也要在表尾插入数字0),输出表A。
时间: 2023-06-03 22:05:20 浏览: 101
这个问题属于计算机编程问题,可以回答。以下是代码示例:
```c
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
int InitList(SqList *L) {
L->length = 0;
return 0;
}
int LocateMin(SqList L) {
int i, min, pos;
if (L.length == 0) {
return -1;
}
min = L.data[0];
pos = 0;
for (i = 1; i < L.length; i++) {
if (L.data[i] < min) {
min = L.data[i];
pos = i;
}
}
printf("最小值为 %d,位置为 %d\n", min, pos);
return pos;
}
int DeleteMin(SqList *L) {
int pos, i;
pos = LocateMin(*L);
if (pos == -1) {
return -1;
}
for (i = pos + 1; i < L->length; i++) {
L->data[i - 1] = L->data[i];
}
L->length = L->length - 1;
return 0;
}
void DeleteEven(SqList *L) {
int i, j, count;
count = 0;
for (i = 0; i < L->length; i++) {
if (L->data[i] % 2 == 0) {
count++;
} else {
L->data[j] = L->data[i];
j++;
}
}
L->length = j;
for (i = 0; i < count; i++) {
L->data[j] = 0;
j++;
}
}
int main() {
SqList L;
int i, n;
InitList(&L);
printf("请输入顺序表,以-1结束:\n");
i = 0;
while (1) {
scanf("%d", &n);
if (n == -1) {
break;
}
L.data[i] = n;
L.length++;
i++;
}
if (LocateMin(L) != -1) {
DeleteMin(&L);
printf("删除最小值后的表为:\n");
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
DeleteEven(&L);
printf("删除偶数并插入数量后的表为:\n");
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
} else {
printf("ERROR\n");
}
return 0;
}
```
在这个程序中,我们首先定义了一个SqList结构体来表示顺序表。InitList函数用来初始化顺序表,使其长度为0。LocateMin函数用来找到表中的最小值及其位置,如果表为空则返回-1。DeleteMin函数用来删除表中的最小值。DeleteEven函数用来删除表中的偶数并在表尾插入删除的数量。在main函数中,我们先输入顺序表,然后调用LocateMin、DeleteMin和DeleteEven函数进行操作,最后输出修改后的表。
阅读全文