[操作疑難] 初階 C programming 求救

本帖最後由 毒得太遲 於 2015-3-8 13:44 編輯

而家given 1個 .c  1個 .h,
要求你base on given code 去develop 8 functions

!!A, B, C are array!!

1) add {example function: add (A, x)}[meaning: add element x to A]
2) belongsto {example function: belongsto (A, x)}[meaning: check x is an element of A]
3) union {example function: union (A, B, C)}[meaning: C=A∪B]
4) interset {example function: interset (A, B, C)}[meaning: C=A∩B]
5) difference {example function: difference (A, B, C)}[meaning: C=A-B]
6) symmetricdiff {example function: symmetricdiff (A, B, C)}[meaning: C=(A-B)∪(B-A)]
7) issubset {example function: issubset (A, B)}[meaning: check every value of A is the member of B]
8) equals {example function: equals (A, B)}[meaning: check A is equal to B]

我連最basic的 belongsto() , add() 都唔識

Ching!!! 求救求救求救!
  1. #include"set.h"

  2. int main(){
  3.         int i;
  4.         int a;
  5.         set aset, bset, cset;
  6.         set un, inter, diff, symdiff;
  7.         int ran;
  8.         int modd;
  9.         int noofmem;
  10.         modd = 19;
  11.         noofmem = 10;
  12.         initiate(aset);       
  13.         initiate(bset);
  14.         initiate(cset);       
  15.         initiate(un);       
  16.         initiate(inter);
  17.            initiate(diff);
  18.            initiate(symdiff);

  19.         srand(time(NULL));
  20.             for(i=0; i<5; i++){
  21.                  ran = rand()%7;
  22.                  if(!belongsto(aset, ran)){
  23.                                add(aset, ran);
  24.                       }       
  25.             }
  26.            
  27.             for(i=0; i<5; i++){
  28.                  ran = rand()%7;
  29.                  if(!belongsto(bset, ran)){
  30.                                add(bset, ran);
  31.                       }       
  32.             }

  33.             for(i=0; i<noofmem; i++){
  34.                  ran = rand()%modd;
  35.                  if(!belongsto(cset, ran)){
  36.                                add(cset, ran);
  37.                      }       
  38.             }

  39.        
  40.             printf("The set A:\n");
  41.             setdisplay(aset);
  42.             printf("\n");
  43.             printf("The set B:\n");
  44.             setdisplay(bset);
  45.             printf("\n");
  46.             printf("The set C:\n");
  47.             setdisplay(cset);
  48.             printf("\n");
  49.             myunion(aset, bset, un);
  50.             printf("The union of A and B is:\n");
  51.             setdisplay(un);
  52.             printf("\n");
  53.             intersect(cset, bset, inter);
  54.             printf("The intersection of B and C is:\n");
  55.             setdisplay(inter);
  56.             printf("\n");
  57.             difference(aset, cset, diff);
  58.             printf("The difference of A and C is:\n");
  59.             setdisplay(diff);
  60.             printf("\n");
  61.             symmetricdiff(aset, bset, symdiff);
  62.             printf("The symmetric difference of A and B is:\n");
  63.             setdisplay(symdiff);
  64.             if(issubset(aset, bset))
  65.                      printf("A is a subset of B.\n");
  66.                  else
  67.                      printf("A is not a subset of B.\n");
  68.                         if(equals(aset, bset))
  69.                      printf("A equals to B.\n");
  70.                  else
  71.                      printf("A does not equal to B.\n");

  72.             getchar();
  73.             return 0;
  74. }
複製代碼
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<stdlib.h>
  4. #include<mem.h>

  5. #define MAXLENGTH 100
  6. #define TRUE 1
  7. #define FALSE 0
  8. #define ERROR -1
  9. #define MYNULL -1

  10. typedef int ElementType;

  11. typedef int boolean;

  12. typedef struct Node{
  13.         ElementType data;
  14.         int link;
  15.         boolean occupied;
  16. } node;

  17. typedef node set[MAXLENGTH];



  18. void initiate(set);
  19. int length(set);
  20. ElementType get(set, int);
  21. ElementType next(set, int);
  22. ElementType prior(set, int);
  23. int locate(set, ElementType);
  24. void insert(set, int, ElementType);
  25. void mydelete(set, int);
  26. boolean isempty(set);
  27. void setdisplay(set);



  28. /*I NEED TO BE DONE
  29. void add(set,ElementType);
  30. boolean belongsto(set, ElementType);
  31. void union(set, set,set);
  32. void interset(set, set,set);
  33. void difference(set, set,set);
  34. void symmetricdiff(set, set,set);
  35. boolean issubset(set, set);
  36. boolean equals(set, set);
  37. I NEED TO BE DONE*/


  38. void initiate(set p){
  39.         int i;
  40.         p[0].link = MYNULL;
  41.         for(i=1; i<MAXLENGTH; i++)
  42.                 p[i].occupied = FALSE;
  43. }

  44. int length(set p){
  45.         int n=0;
  46.         int q = p[n].link;
  47.         while(q != MYNULL){
  48.                 n++;
  49.                 q = p[q].link;
  50.         }
  51.         return n;
  52. }

  53. boolean isempty(set p){
  54.         return(length(p)==0);
  55. }



  56. ElementType get(set p, int i){
  57.         int j = 1;
  58.         int q = 0;
  59.         while((j<=i) && (p[q].link != MYNULL)){
  60.                 q = p[q].link;
  61.                 j++;
  62.         }
  63.         if(q != MYNULL)
  64.                 return p[q].data;
  65.         else
  66.                 return ERROR;
  67. }

  68. ElementType next(set p, int i){
  69.         return get(p, i+1);
  70. }

  71. ElementType prior(set p, int i){
  72.         return get(p, i-1);
  73. }

  74. int locate(set p, ElementType x){
  75.         int j = 1;
  76.         int q = 0;
  77.         while((p[q].link != MYNULL)){
  78.                 q = p[q].link;
  79.                 if (p[q].data == x){
  80.                         return j;
  81.                 }
  82.                 else{
  83.                         j++;
  84.                 }
  85.         }
  86.         return ERROR;
  87. }

  88. void insert(set p, int i, ElementType x){
  89.         boolean found = FALSE;
  90.         int newindex;
  91.         int j = 1;
  92.         int q;
  93.         while(!found){
  94.                 if(!p[j].occupied){
  95.                         newindex = j;
  96.                         found = TRUE;
  97.                 }
  98.                 else
  99.                         j++;
  100.         }
  101.         if(found){
  102.                 p[newindex].data = x;
  103.                 p[newindex].occupied = TRUE;
  104.                 q = 0;
  105.                 j=1;
  106.                 while((j<i) && (p[q].link != MYNULL)){
  107.                         j++;
  108.                         q = p[q].link;
  109.                 }
  110.                 if (j==i){
  111.                         p[newindex].link = p[q].link;
  112.                         p[q].link = newindex;
  113.                 }
  114.                 else{
  115.                         printf("Error!\n");
  116.                 }
  117.         }
  118.         else{
  119.                 printf("The list is full!\n");
  120.         }
  121. }

  122. void mydelete(set p, int i){
  123.         int j = 0;
  124.         int q, index;
  125.         q = 0;
  126.         while((j<i-1) && (p[q].link != MYNULL)){
  127.                 q = p[q].link;
  128.                 j++;
  129.         }
  130.         if ((p[q].link!=MYNULL) && (j==(i-1))){
  131.                 index = p[q].link;
  132.                 p[q].link = p[index].link;
  133.         }
  134.         else{
  135.                 printf("Error!\n");
  136.         }
  137.         p[index].occupied = FALSE;
  138. }


  139. void setdisplay(set p){
  140.         int q = 0;
  141.         int j = 1;

  142.         if (length(p) == 0)
  143.                 printf("Empty list, Error!");
  144.         else{

  145.                 while(p[q].link != MYNULL){
  146.                             q = p[q].link;
  147.                         if(j==1)
  148.                                     printf("The 1st element is %d\n",p[q].data);
  149.                          else if (j==2)
  150.                                         printf("The 2nd element is %d\n",p[q].data);
  151.                         else if (j==3)
  152.                                        printf("The 3rd element is %d\n",p[q].data);
  153.                          else
  154.                                     printf("The %dth element is %d\n",j,p[q].data);
  155.                         j++;
  156.                 }
  157.         }
  158. }
複製代碼

HELP!!!

TOP

add:
new 一個新 array (size = 舊 array +1 ),
之後 clone 哂 array 入面的野,
指個 pointer 落新 array

TOP

這是 data structure, 想想甚麼是 array.

TOP

belongs to用linear search,issubset用belongs to,完全一樣嗰個我建議sort咗再compare。

TOP