顺序表筛选数据的应用

来源:互联网 发布:淘宝网开通账户 编辑:程序博客网 时间:2024/06/15 06:13

       问题如下:线性顺序表A中含有n个有序整数{2,2,3,4,4,4,6,6,8,8,8,9},B为空,写一个算法,将A中不相同的值移入B中,要求:对A表只扫描一次,结果B中元素是{2,3,4,6,8,9}


(1).核心算法思想

      该算法先将第一个数赋值给数组b的第一个数,然后从第二个数开始筛选,筛选时通过判断数组a中下标i的数与数组a中下标为i-1的数是否相同,若相同则下标i加1,判断下一位,若不相同,则将此时数组a下标i所指向的数赋值给数组b的下标j所指向的数且j,加1,循环至数组a的下标i指向最后一个数结束为止。

(2).算法特点描述

      该算法时间复杂度为O(n)和空间复杂度为O(1),处理有序数组较为轻松简便,若是处理无序数组,则还需要根据情况选择是否先排序然后再扫描,那样将会大大增加算法的复杂度。

(3).具体实现

main(){

      int a[12] = {2,2,3,4,4,4,6,6,8,8,8,9};

      int b[12] = {0};

      int i,j;

      j = 1;

      b[0] = a[0];

      for(i = 1; i < 12; i++){

           if(a[i]!=a[i-1]){

                 b[j] = a[i];

                 j++;

           }

      }

      for(i = 0; i < j; i++ ){

           printf("%-3d",b[i]);

      }

      return 0;

}

(4).程序运行结果与分析

           程序运行结果: