顺序存储的线性表A,其数据元素为整型,试编写一算法,将A拆成B和C两个表,使A中元素值大于等于0的元素放入B,小于0的放入C中. 要求:表B和C另外设置存储空间 c语言算法设计
时间: 2024-09-19 12:17:59 浏览: 77
在C语言中,你可以通过遍历顺序存储的线性表A,对每个元素进行判断并分别插入到B和C表中。下面是一个简单的示例算法:
```c
#include <stdio.h>
// 假设A、B和C都是动态数组,需要预先分配足够的空间
#define MAX_SIZE 100 // 假设最大元素数
typedef int ElementType;
void splitList(ElementType *A, size_t A_size, ElementType **B, ElementType **C) {
size_t B_index = 0, C_index = 0;
for (size_t i = 0; i < A_size; ++i) {
if (A[i] >= 0) { // 元素大于等于0,放B表
*B[B_index++] = A[i]; // 将元素复制到B表,并更新索引
} else { // 元素小于0,放C表
*C[C_index++] = A[i]; // 将元素复制到C表,并更新索引
}
}
*B = realloc(*B, sizeof(ElementType) * B_index); // 调整B表大小
*C = realloc(*C, sizeof(ElementType) * C_index); // 调整C表大小
}
int main() {
ElementType A[MAX_SIZE], *B = NULL, *C = NULL;
size_t A_count, B_count, C_count;
// 初始化A表和获取实际元素个数
printf("请输入A表中的整数(输入-1结束):\n");
for (scanf("%d", &A[0]); A[0] != -1; scanf("%d", &A[++A_count])) {}
splitList(A, A_count, &B, &C);
printf("B表元素:\n");
for (B_count = 0; B[B_count] != NULL; ++B_count) {
printf("%d ", B[B_count]);
}
printf("\n");
printf("C表元素:\n");
for (C_count = 0; C[C_count] != NULL; ++C_count) {
printf("%d ", C[C_count]);
}
printf("\n");
free(B);
free(C); // 释放不再使用的内存
return 0;
}
```
这个程序首先读取用户输入的整数填充`A`表,然后调用`splitList`函数根据元素值将其分成`B`和`C`两部分。注意,该代码假设你已经有了动态分配数组的功能(如`realloc`),如果使用标准C库,可能需要其他方式管理内存。
阅读全文