Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1885877
  • 博文数量: 217
  • 博客积分: 4362
  • 博客等级: 上校
  • 技术积分: 4180
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-20 09:31
文章分类

全部博文(217)

文章存档

2017年(1)

2015年(2)

2014年(2)

2013年(6)

2012年(42)

2011年(119)

2010年(28)

2009年(17)

分类: C/C++

2011-08-13 21:11:45

    好久都没有用c语言写程序了,对于c语言都有些生疏了~在暑期最后这十几天内,把数据结构好好复习一下吧,今天静下心来,慢慢复习数据结构时候,发现自己长时间没有编写程序了,竟然编写一个简单的线性表的合并花费的2个多小时,唉,看来程序还是要坚持写的,不能放下~

题目要求:有两个线性表a和b,这两个线性表都是非递减有序排列,现在要把这两个线性表合并为一个非递减有序排列的c线性表。
算法思想:用i,j,k这3个指示器分别指向这3个线性表的下标,然后将a[i]和b[j]进行比较,如果a[i]
实现代码:
  1. #include <stdio.h>

  2. #define intlen(x) sizeof(x)/sizeof(int)      //用来计算x整型数组的长度

  3. int len_a, len_b, len_c;
  1. void merge(int a[], int b[], int c[])
  2. {
  3.     int i, j, k;
  4.     i = j = k = 0;
  5.     while(i < len_a && j < len_b) {
  6.         if(a[i] <= b[j]) {
  7.             c[k++] = a[i++];
  8.         } else {
  9.             c[k++] = b[j++];
  10.         }
  11.     }
  12.     while(i < len_a) {
  13.         c[k++] = a[i++];
  14.     }
  15.     while(j < len_b) {
  16.         c[k++] = b[j++];
  17.     }
  18. }

  19. int main()
  20. {
  21.     int a, b, i;
  22.     fprintf(stdout, "Input two array size:\n");
  23.     fscanf(stdin, "%d%d", &a, &b);
  24.     int arr_a[a], arr_b[b], arr_c[a+b];
  25.     fprintf(stdout, "Input array a:\n");
  26.     for(i = 0; i < a; i++) {
  27.         fscanf(stdin, "%d", arr_a+i);
  28.     }
  29.     fprintf(stdout, "Input array b:\n");
  30.     for(i = 0; i < b; i++) {
  31.         fscanf(stdin, "%d", arr_b+i);
  32.     }
  33.     len_a = intlen(arr_a);
  34.     len_b = intlen(arr_b);
  35.     len_c = intlen(arr_c);
  36.     merge(arr_a, arr_b, arr_c);
  37.     fprintf(stdout, "The merged result:\n");
  38.     for(i = 0; i < len_c; i++) {
  39.         fprintf(stdout, "%d\t", arr_c[i]);
  40.     }
  41.     fprintf(stdout, "\n");
  42.     return 0;
  43. }
测试结果:
  1. ^_^[sunny@sunny-laptop ~/DS]31$ ./a.out
  2. Input two array size:
  3. 3 4
  4. Input array a:
  5. 2
  6. 2
  7. 4
  8. Input array b:
  9. 1
  10. 3
  11. 5
  12. 6
  13. The merged result:
  14. 1    2    2    3    4    5    6    
  15. ^_^[sunny@sunny-laptop ~/DS]32$

阅读(3797) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

sunjiangang-ok2011-09-28 07:46:47

KakitChen: 用fprintf和fscanf是一个好的编程习惯呢?还是个人的代码风格?.....
这个可能是我的习惯吧,但是在printf()中调用了vsprintf()。至于是不是一个好的习惯,个人觉得printf()比较好吧。

KakitChen2011-09-28 02:08:47

用fprintf和fscanf是一个好的编程习惯呢?还是个人的代码风格?