好久都没有用c语言写程序了,对于c语言都有些生疏了~在暑期最后这十几天内,把数据结构好好复习一下吧,今天静下心来,慢慢复习数据结构时候,发现自己长时间没有编写程序了,竟然编写一个简单的线性表的合并花费的2个多小时,唉,看来程序还是要坚持写的,不能放下~
题目要求:有两个线性表a和b,这两个线性表都是非递减有序排列,现在要把这两个线性表合并为一个非递减有序排列的c线性表。
算法思想:用i,j,k这3个指示器分别指向这3个线性表的下标,然后将a[i]和b[j]进行比较,如果a[i]
实现代码:
- #include <stdio.h>
-
-
#define intlen(x) sizeof(x)/sizeof(int) //用来计算x整型数组的长度
-
-
int len_a, len_b, len_c;
-
void merge(int a[], int b[], int c[])
-
{
-
int i, j, k;
-
i = j = k = 0;
-
while(i < len_a && j < len_b) {
-
if(a[i] <= b[j]) {
-
c[k++] = a[i++];
-
} else {
-
c[k++] = b[j++];
-
}
-
}
-
while(i < len_a) {
-
c[k++] = a[i++];
-
}
-
while(j < len_b) {
-
c[k++] = b[j++];
-
}
-
}
-
-
int main()
-
{
-
int a, b, i;
-
fprintf(stdout, "Input two array size:\n");
-
fscanf(stdin, "%d%d", &a, &b);
-
int arr_a[a], arr_b[b], arr_c[a+b];
-
fprintf(stdout, "Input array a:\n");
-
for(i = 0; i < a; i++) {
-
fscanf(stdin, "%d", arr_a+i);
-
}
-
fprintf(stdout, "Input array b:\n");
-
for(i = 0; i < b; i++) {
-
fscanf(stdin, "%d", arr_b+i);
-
}
-
len_a = intlen(arr_a);
-
len_b = intlen(arr_b);
-
len_c = intlen(arr_c);
-
merge(arr_a, arr_b, arr_c);
-
fprintf(stdout, "The merged result:\n");
-
for(i = 0; i < len_c; i++) {
-
fprintf(stdout, "%d\t", arr_c[i]);
-
}
-
fprintf(stdout, "\n");
-
return 0;
-
}
测试结果:
- ^_^[sunny@sunny-laptop ~/DS]31$ ./a.out
-
Input two array size:
-
3 4
-
Input array a:
-
2
-
2
-
4
-
Input array b:
-
1
-
3
-
5
-
6
-
The merged result:
-
1 2 2 3 4 5 6
-
^_^[sunny@sunny-laptop ~/DS]32$
阅读(3837) | 评论(2) | 转发(0) |