0);Р }Р while(!feof(fp))Р {Р fread(&d,1,sizeof(array),fp);Р }Р fclose(fp);Р for(i=0;i<d.size;i++)Р {Р if(b.data[i]!=d.data[i])Р break;Р }Р if(i==d.size)Р {Р for(i=0;i<a->size;i++)Р printf("%d ",a->data[i]);Р printf("\n");Р }Р return 0;Р}Р二.数据删除问题Р编写删除具有N个数据项的数组A中所有重复项的程序,返回A中仍有的数据项。要求运行时间在O(NlogN)。Р1.采用类语言定义相关的数据类型Рtypedef struct StackNode{ //结点结构体Р?char data;Р?struct StackNode *next;Р}StackNode,*LinkStackPtr;Рtypedef struct LinkStack{ //链栈结构体Р?LinkStackPtr top;Р?int count;Р}LinkStack;Р2.算法设计Р产生随机数组。Р利用随机数组创建链表。Р用x数组中的n个数据创建一个单链表,返回表头节点地址。Р删除重复节点:递归函数。Р从输入参数节点出发,删去值相同的多余节点的算法。Р3.函数的调用关系图Р如图所示:РMain( )Рfor ( ) Р删除Рfor()Р排序Р 图. 2-1Р4.调试分析Рa、时间复杂度的问题让我很为难,一开始不知道如何下手好,后来查找课本决定使用二分查找。Рb、算法的时间复杂度为O(nlogn),空间复杂度为O(n)Р5.测试结果Р如图所示:Р Р图.2-2Р 输入10个数:1 2 3 15 13 21 46 32 2 3Р 预期结果:1 2 3 13 15 21 32 46